我正在使用新的 android 数据绑定,它工作得很好。我能够使用 EditText、TextView、Radio 和复选框执行数据绑定。现在,我无法在微调器中进行数据绑定。
在下面的链接中找到了一些线索: Android Spinner data binding with xml layout
但是,仍然无法找到解决方案。还需要执行双向数据绑定。应反映微调器数据的选定值。
有人可以给我举个例子吗?
这是我的 xml
代码:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="viewModel"
type="com.ViewModels.model" />
</data>
<Spinner
android:id="@+id/assessmemt_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_margin="@dimen/carview_margin"
android:layout_toRightOf="@+id/text_bp"
android:drawSelectorOnTop="true"
android:spinnerMode="dropdown"
android:visibility="@{viewModel.type.equals(@string/spinner_type)? View.VISIBLE : View.GONE}" />
</layout>
查看模型:
public class AssessmentGetViewModel {
private String valueWidth;
private ArrayList<String> values;
private String type;
public String getValueWidth() { return this.valueWidth; }
public void setValueWidth(String valueWidth) { this.valueWidth = valueWidth; }
public ArrayList<String> getvalues() { return this.values; }
public void setvalues(ArrayList<String> values) { this.values = values; }
public String gettype() { return this.type; }
public void settype(String type) { this.type = type; }
}
原文由 San Jaisy 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 线解决方案
android:selectedItemPosition="@={item.selectedItemPosition}"
而已! 无需制作自定义 BindingAdapter。
例子
项目.class
activity_main.xml
主活动.java
如果您需要随时从代码中获取所选项目,请使用此
如果您需要以编程方式更改它,请将您的变量设置为 @Bindable 。
否则,您可以删除 @Bindable 和
notifyPropertyChanged(BR.selectedItemPosition);
。您可以使用任何 BaseObservable 或 ObservableField 或 Live Data 。它是由你决定。 我使用 BaseObservable 因为它非常简单。 ,只是从 BaseObservable 扩展,现在所有字段都是可观察的。