android - 如何在 DataBinding 中获取包含的 XML 绑定
问题描述
我有一个 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
解决方案
无需<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>
然后您可以使用直接访问包含的布局视图
ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
activityMainBinding.contentMain.recyclerView.setAdapter();
推荐阅读
- python - CGI - HTML 到 python
- assembly - 操作数必须是可重定位的程序集 x86 问题
- php - 我可以根据 URL 显示单一视图的不同部分吗?
- apache-kafka - 如何获取 Apache kafka 正在使用的配置文件名
- json - 使用数组解组 JSON
- powershell - 在 powershell 脚本中为 Nintex 设置凭据以迁移到 O365
- c# - 我在字符串的末尾得到了价值
- php - 从 URL 运行脚本时来自 cpanel 重新调整错误的 Cron 作业没有重新运行任何错误
- opencv - OpenMP 的结果令人失望
- git - 从 Azure DevOps 克隆存储库时出现致命错误