我認爲使用Custom Setters可以解決您的問題。 Check this section在開發者指南。
我可以給你一個簡單的例子。假設您的視圖的名稱是CustomView
和您的視圖模型是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
使用此功能來設置視圖模型:
MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
ViewModel viewModel = new ViewModel();
binding.setViewModel(viewModel);
或者你也可以直接從您的自定義視圖膨脹:
LayoutViewCustomBinding binding = DataBindingUtil.inflate(LayoutInflater.from(getContext()), R.layout.layout_view_custom, this, true);
ViewModel viewModel = new ViewModel();
binding.setViewModel(viewModel);
好答案!另外,如果你的'ComplexCustomPicker'上有一個setter方法需要'PickerViewModel',那麼你不需要'BindingAdaper'。 Android數據綁定會自動嘗試使用名稱setXxx查找某些內容,其中Xxx是屬性。因此,如果'ComplexCustomPicker'有一個方法'void setViewModel(PickerViewModel)',就可以像上面那樣使用屬性'app:viewModel =「@ {viewModel}」''。這種技術意味着你將你的視圖綁定到你的模型類型,但在你的應用中可能沒問題。 –