Как получить привязку XML в DataBinding - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть класс DataBinding ActivityMainBinding, где XMl выглядит следующим образом

    <?xml version="1.0" encoding="utf-8"?>
    <layout>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <include layout="@layout/content_main" />

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:layout_margin="@dimen/fab_margin"
            app:srcCompat="@drawable/ic_add" />

    </android.support.design.widget.CoordinatorLayout>
    </layout>

А content_main.xml - это еще одна привязка

    <?xml version="1.0" encoding="utf-8"?>
    <layout>

        <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MainActivity"
            tools:showIn="@layout/activity_main">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:clickable="true"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:scrollbars="vertical"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

        </android.support.constraint.ConstraintLayout>
    </layout>

Теперь в своей активности я установилпредставление контента, как это.

        ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

Теперь я могу получить доступ ко всем элементам XML, используя эту привязку.как

        Toolbar toolbar = activityMainBinding.toolbar;            

, но некоторые из моих виджетов находятся во включенном макете, который ContentMainBinding

Теперь, как я могу создать экземпляр ContentMainBinding из ActivityMainBinding?

Я пытался

        contentMainBinding = DataBindingUtil.getBinding(activityMainBinding.container);

Но он вылетает с ошибкой

         ActivityMainBindingImpl cannot be cast to ContentMainBinding                 

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Добавьте идентификатор для включения тега

<include
    android:id="@+id/included"
    layout="@layout/content_main"/>

И в коде используйте

activityMainBinding.included.recyclerView

Проверьте, что ссылка

0 голосов
/ 14 ноября 2018

Нет необходимости добавлять тег <layout>----</layout> в ваш файл content_main.xml. Вам необходимо установить идентификатор включенного макета, например:

 <?xml version="1.0" encoding="utf-8"?>
    <layout>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <include layout="@layoutcontent_main" android:id="@+id/contentMain" />

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:layout_margin="@dimen/fab_margin"
            app:srcCompat="@drawable/ic_add" />

    </android.support.design.widget.CoordinatorLayout>
    </layout>

Затем вы можете получить прямой доступ к включенному представлению макета, используя

ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
activityMainBinding.contentMain.recyclerView.setAdapter();
...