android数据绑定(bind)与自定义 View

标签 android data-binding custom-view

Android data binding guide讨论了 Activity 或 Fragment 中的绑定(bind)值,但是有没有办法使用自定义 View 执行数据绑定(bind)?

我想做这样的事情:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.mypath.MyCustomView
        android:id="@+id/my_view"
        android:layout_width="match_parent"
        android:layout_height="40dp"/>

</LinearLayout>

使用 my_custom_view.xml:

<layout>

<data>
    <variable
        name="myViewModel"
        type="com.mypath.MyViewModelObject" />
</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{myViewModel.myText}" />

</LinearLayout>

</layout>

虽然可以通过在自定义 View 上设置自定义属性来做到这一点,但如果要绑定(bind)很多值,这很快就会变得很麻烦。

有什么好方法可以完成我想做的事情吗?

最佳答案

在您的自定义 View 中,按照您通常的方式扩展布局,并为您要设置的属性提供一个 setter :

private MyCustomViewBinding mBinding;
public MyCustomView(...) {
    ...
    LayoutInflater inflater = (LayoutInflater)
        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mBinding = MyCustomViewBinding.inflate(inflater);
}

public void setMyViewModel(MyViewModelObject obj) {
    mBinding.setMyViewModel(obj);
}

然后在你使用的布局中:

<layout xmlns...>
    <data>
        <variable
            name="myViewModel"
            type="com.mypath.MyViewModelObject" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.mypath.MyCustomView
            android:id="@+id/my_view"
            app:myViewModel="@{myViewModel}"
            android:layout_width="match_parent"
            android:layout_height="40dp"/>

    </LinearLayout>
</layout>

在上面,为 app:myViewModel 创建了一个自动绑定(bind)属性,因为有一个名为 setMyViewModel 的 setter。

关于android数据绑定(bind)与自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799622/

相关文章:

android - 如何访问库项目中自定义 FrameLayout 的子元素?

android - 来自 GCM/APN 的应用卸载反馈

c# - 将 ObservableCollection 绑定(bind)到 wpf 数据网格 : Grid stays empty

c# - 不同的 DataTemplate 取决于属性的枚举值

ios - 在 iOS 的自定义 View 中设置项目的属性

Android:如何将 "Custom View"动态添加到线性布局中

android - QT Windows 到 Android 必要性项目变更

android - Chrome 自定义选项卡可以在生产中使用吗?

c# - 如何拥有与 OnPropertyChanged 一起使用的 UserControl 的可绑定(bind)属性

iphone - UIPickerView 在 Android 上看起来很像