首页 > 解决方案 > 来自 main.xml 的嵌套布局的数据绑定

问题描述

我可以成功地将 main.xml 的 UI 元素绑定到我的自定义模型类。但是,当我想使用嵌套工具栏.xml 布局的绑定时,它不起作用。

下面是我的代码片段。我在不同的试验中遇到不同的错误。

主视图.xml

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

    <data>

        <variable
            name="binding"
            type="com.abc.xyz.android.model.NavigationBinding"/>
    </data>

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/parent_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!-- tool bar to display back image and title -->
        <include
            android:id="@+id/tool_bar_view"
            layout="@layout/tool_bar"
            bind:binding="@{binding}"/> <!-- What to write here -->

        <LinearLayout
            android:id="@+id/ll_bottom_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="vertical">
          ......
        </LinerarLayout>
        </RelativeLayout>
        </layout>

too_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="binding"
            type="com.abc.xyz.android.model.NavigationBinding"/>
    </data>

    <RelativeLayout
        android:id="@+id/root_toolbar_view"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize">

                <Button
                    android:id="@+id/btn_next1"
                    style="@style/Button.Borderless"
                    android:layout_width="80dp"
                    android:layout_height="match_parent"
                    android:layout_alignParentRight="true"
                    android:enabled="@{person.nextEnabled}"
                    android:text="@string/text_next"/>
....
</RelativeLayout>
</layout>

导航绑定.java

public class NavigationBinding extends BaseObservable {

    private boolean isPreviousEnabled = false;
    private boolean isNextEnabled = false;

    @Bindable
    public boolean isPreviousEnabled() {
        return isPreviousEnabled;
    }

    public void setPreviousEnabled(boolean enabled) {
        isPreviousEnabled = enabled;
        notifyPropertyChanged(BR.previousEnabled);
    }

    @Bindable
    public boolean isNextEnabled() {
        return isNextEnabled;
    }

    public void setNextEnabled(boolean enabled) {
        isNextEnabled = enabled;
        notifyPropertyChanged(BR.nextEnabled);
    }
    }

MainActivity.java

 public class MainActivity extends AppCompatActivity{

    private NavigationBinding navigationBinding = null;
    private MainViewBinding uiElementBinding = null;

    @Override
        public void onCreate() {
    navigationBinding = new NavigationBinding();
            uiElementBinding = DataBindingUtil.bind(parentView); // parentView = RecyclerView with parent_view id.
            uiElementBinding.setBinding(navigationBinding);
    }
    }

你能帮我初始化 .java 文件中的变量以及如何使用它们吗?

标签: androidxmldata-bindingnestedinclude

解决方案


推荐阅读