android - 如何在 DataBinding 中包含 XML 绑定(bind)

标签 android data-binding android-databinding

我有一个 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 是另一个绑定(bind)

    <?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>

现在,在我的 Activity 中,我像这样设置内容 View 。

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

现在我可以使用此绑定(bind)访问所有 XML 元素。喜欢

        Toolbar toolbar = activityMainBinding.toolbar;            

但我的一些小部件位于包含的布局中,即 ContentMainBinding

现在,如何从 ActivityMainBinding 创建一个 ContentMainBinding 实例?

我试过了

        contentMainBinding = DataBindingUtil.getBinding(activityMainBinding.container);

但是,它因错误而崩溃

         ActivityMainBindingImpl cannot be cast to ContentMainBinding                 

最佳答案

无需添加<layout>----</layout> content_main.xml 文件中的标记。您需要设置包含布局的 ID,例如:

 <?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>

然后您可以使用

直接访问包含的布局 View
ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
activityMainBinding.contentMain.recyclerView.setAdapter();

关于android - 如何在 DataBinding 中包含 XML 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53300598/

相关文章:

android - Google Speech 的空白回复

java - 改造错误 java.io.IOException : Received authentication challenge is null

c# - WPF 绑定(bind)到 ElementName 引发 NullReferenceException

c# - WinForm DataBinding 业务对象 C# .NET 中的隐藏属性

android - 是否可以将参数发送到来自 xml View 的绑定(bind)事件

android - ChipGroup 2 路绑定(bind)适配器

android - 为什么我的听众没有在这个 Firestore 集中点击这里

android - Android Studio卡在新项目上

Javascript knockout 绑定(bind)嵌套对象不起作用

android - Realm 与 Android 数据绑定(bind)混淆