来自包含的 DataBindingUtil 绑定布局
Posted
技术标签:
【中文标题】来自包含的 DataBindingUtil 绑定布局【英文标题】:DataBindingUtil bind layout from include 【发布时间】:2021-12-16 19:23:47 【问题描述】:我有这样的 content.xml 布局
<androidx.constraintlayout.widget.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_
android:layout_
android:orientation="vertical">
<view.TouchyWebView
android:layout_
android:layout_
android:id="@+id/content_view" >
</view.TouchyWebView>
<include
android:id="@+id/view_list"
layout="@layout/fragment_list"
android:layout_
android:layout_
app:layout_constraintTop_toBottomOf="@+id/content_view"
tools:layout_editor_absoluteX="-9dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
View view = inflater.inflate(R.layout.content, container, false);
WebView webView = view.findViewById(R.id.content_view);
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_list, container, false); // this does'n work
我如何将 fragment_list 从 include 绑定到 DataBindingUtil.inflate 或 DataBindingUtil.bind?
like DataBindingUtil.inflate(inflater, R.layout.fragment_list, container, false);
但抛出 content.xml 布局
【问题讨论】:
最好最简单的解决方案here有什么问题可以告诉我? 我可以使用 view.findViewById(R.layout.fragment_list) 因为他无法将视图转换为布局吗? 您想对 Fragment 使用 DataBinding 对吗? 是的,前段时间我在 Fragment_list 布局上进行了数据绑定,例如 DataBindingUtil.inflate(inflater, R.layout.fragment_list, container, false),它是单独的 xml,但现在我需要添加额外的视图在它之前。我用新的 TouchyWebView 创建了新的 xml 并包含了旧的 fragment_list 布局,现在我不知道如何从 include 绑定我的旧的 fragment_list 布局。 我把答案贴在下面你可以看到。 【参考方案1】:要在android的fragment中使用DataBinding,请使用以下方式->
创建->
private FragmentYourVideosBinding binding;
private View view;
然后使用->
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_your_videos, container, false);
view = binding.getRoot();
return view;
要访问 FragmentBindinding,只需键入 FragmentBinding 然后您将在下拉列表中看到您的 Fragment Binding 布局名称。上面的链接中有描述,您可以从那里阅读。
首先用 layout 标签 包装你所有的子布局,如下所示。您可以复制与您的代码相同的代码。
<?xml version = "1.0" encoding = "utf-8" ?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/tools" >
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_
android:orientation="vertical">
<view.TouchyWebView
android:layout_
android:layout_
android:id="@+id/content_view" >
</view.TouchyWebView>
<include
android:id="@+id/view_list"
layout="@layout/fragment_list"
android:layout_
android:layout_
app:layout_constraintTop_toBottomOf="@+id/content_view"
tools:layout_editor_absoluteX="-9dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
【讨论】:
You meen View view = inflater.inflate(R.layout.content, container, false); WebView webView = view.findViewById(R.id.content_view); binding = DataBindingUtil.inflate(inflater, R.layout.fragment_list, container, false); view = binding.getRoot(); 要从 xml 文件中找到任何布局、TextView、Button 或其他任何内容的 id,您必须编写 -> binding.name_of_layout 。不需要写 finViewById。 在 content.xml 中,我在屏幕 TouchyWebView 上有两个元素,ID 为 (content_view) 并包含 @layout/fragment_list"。我无法绑定我的视图 = binding.getRoot(); 正如你所写,因为它只会显示一个元素 - @layout/fragment_list 而没有 @+id/content_view 首先用以上是关于来自包含的 DataBindingUtil 绑定布局的主要内容,如果未能解决你的问题,请参考以下文章
`DataBindingUtil` 中的 `bind`、`inflate` 和 `setContentView` 有啥区别
Android登录屏幕:双向绑定EditText和TextView
Android 使用DataBindingUtil 封装支持DataBinding的BaseActivityBaseFragment
Android 使用DataBindingUtil 封装支持DataBinding的BaseActivityBaseFragment