gpt4 book ai didi

java - 自定义控件中的android数据绑定(bind)

转载 作者:太空狗 更新时间:2023-10-29 13:13:03 29 4
gpt4 key购买 nike

在官方 android 文档中 - 有一些指导如何在 fragment 和 Activity 中使用数据绑定(bind)。但是,我有非常复杂的选择器,具有大量设置。像这样的东西:

class ComplexCustomPicker extends RelativeLayout{
PickerViewModel model;
}

所以我的问题是我需要重写选择器的什么方法才能在其中使用绑定(bind)而不是设置/检查文本字段等单个值?

第二个问题 - 我如何将 viewmodel 传递给 xml 文件中的选择器,我是否需要一些自定义属性?

最佳答案

我认为使用自定义 setter 可以解决您的问题。 Check this section在开发人员指南中。

我可以给你一个简短的例子。假设你的 View 名称是 CustomView,你的 View 模型是 ViewModel,然后在你的任何类中,创建一个这样的方法:

@BindingAdapter({"bind:viewmodel"})
public static void bindCustomView(CustomView view, ViewModel model) {
// Do whatever you want with your view and your model
}

在您的布局中,执行以下操作:

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

<data>

<variable
name="viewModel"
type="com.pkgname.ViewModel"/>
</data>

// Your layout

<com.pkgname.CustomView
// Other attributes
app:viewmodel="@{viewModel}"
/>

</layout>

然后从您的 Activity 使用它来设置 ViewModel:

MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
ViewModel viewModel = new ViewModel();
binding.setViewModel(viewModel);

或者您可以直接从您的自定义 View 中膨胀:

LayoutViewCustomBinding binding = DataBindingUtil.inflate(LayoutInflater.from(getContext()), R.layout.layout_view_custom, this, true);
ViewModel viewModel = new ViewModel();
binding.setViewModel(viewModel);

关于java - 自定义控件中的android数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37965789/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com