Сгенерированный FragmentBinding не содержит моего идентификатора CustomView.

Я использую привязку данных в своем проекте Android, а мой dashboard_fragment_layout.xml содержит LinearLayout, который содержит TextView и CustomView:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.ui.dashboard.DashboardFragment">
    <data>
        <variable
            name="ViewModel"
            type="com.example.ui.dashboard.DashboardViewModel" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/tvSome"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <view
            android:id="@+id/viewCustom"
            class="com.example.ui.dashboard.CustomView"
            android:layout_width="300dp"
            android:layout_height="match_parent"
            android:layout_gravity="bottom|center_horizontal" />
    </LinearLayout>
</layout>

Когда я пытаюсь получить доступ к своему пользовательскому представлению через сгенерированный FragmentDashboardBinding:

mCustomView = mBinding.viewCustom;

я получаю сообщение «Не удается разрешить символ viewCustom» в AndroidStudio. И у меня нет этой проблемы с TextView, он доступен из объекта mBinding:

mSomeTextView = mBinding.tvSome;  // all fine, no errors

Я всегда получаю эту ошибку с пользовательскими представлениями, и единственный способ получить доступ к моему пользовательскому объекту представления - сделать это по-старому с помощью findViewById:

mCustomView = view.findViewById(R.id.viewCustom); // that works

Все вместе:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mViewDataBinding = DataBindingUtil.inflate(inflater, fragment_dashboard_layout, container, false);
        view = mViewDataBinding.getRoot();

        mCustomView = mViewDataBinding.viewCustom;   // 'Can't resolve symbol viewCustom
        mTextView = mViewDataBinding.tvSome;  // all fine
        mCustomView = view.findViewById(R.id.viewCustom);  // that works
    }

Как я могу получить доступ к пользовательским представлениям через сгенерированный объект привязки данных?


person Vlad Morzhanov    schedule 01.11.2017    source источник


Ответы (2)


Измените на com.example.ui.dashboard.CustomView в XML-коде.

И удалите класс в xml-коде.

Попробуй это .

<com.example.ui.dashboard.CustomView
    android:id="@+id/viewCustom"
    android:layout_width="300dp"
    android:layout_height="match_parent"
    android:layout_gravity="bottom|center_horizontal" />
person KeLiuyue    schedule 01.11.2017

Вы использовали неправильный тег просмотра. попробуйте заменить тег view на View Замените код просмотра на этот.

<View
        android:id="@+id/viewCustom"
        class="com.example.ui.dashboard.CustomView"
        android:layout_width="300dp"
        android:layout_height="match_parent"
        android:layout_gravity="bottom|center_horizontal" />

Удачного кодирования!!

person Hemant Parmar    schedule 01.11.2017