来自包含的 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

WCF mex 不包含来自主机的完整绑定信息

Android 使用DataBindingUtil 封装支持DataBinding的BaseActivityBaseFragment

Android 使用DataBindingUtil 封装支持DataBinding的BaseActivityBaseFragment