gpt4 book ai didi

java - Android spinner Data Binding 使用 XML 并显示选定的值

转载 作者:IT老高 更新时间:2023-10-28 21:14:08 30 4
gpt4 key购买 nike

我正在使用新的 android 数据绑定(bind),效果很好。我能够使用 EditText、TextView、Radio 和复选框执行数据绑定(bind)。现在,我无法在 spinner 中进行数据绑定(bind)。

在下面的链接中找到了一些线索: Android spinner data binding with xml layout

但是,仍然无法找到解决方案。还需要执行双向数据绑定(bind)。应该反射(reflect)微调器数据选择的值。

有人可以举个例子吗?

这是我的 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; }
}

最佳答案

1 线解决方案

android:selectedItemPosition="@={item.selectedItemPosition}"

就是这样!无需自定义BindingAdapter。

Spinner already supports two-way binding by attributes selection and selectedItemPosition. See Android Documentation

You just need to use two way binding selectedItemPosition so that change on spinner reflect on your model field.

示例

Item.class

public class Item extends BaseObservable {
private int selectedItemPosition;

@Bindable
public int getSelectedItemPosition() {
return selectedItemPosition;
}

public void setSelectedItemPosition(int selectedItemPosition) {
this.selectedItemPosition = selectedItemPosition;
notifyPropertyChanged(BR.selectedItemPosition);
}
}

activity_main.xml

<variable
name="item"
type="com.sample.data.Item"/>

<android.support.v7.widget.AppCompatSpinner
...
android:entries="@array/items"
android:selectedItemPosition="@={item.selectedItemPosition}"
>

MainActivity.java

public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setItem(new Item());
binding.getItem().setSelectedItemPosition(4); // this will change spinner selection.
System.out.println(getResources().getStringArray(R.array.items)[binding.getItem().getSelectedItemPosition()]);
}
}

如果您需要随时从代码中获取所选项目,请使用此

binding.getItem().getSelectedItemPosition(); // get selected position
getResources().getStringArray(R.array.items)[binding.getItem().getSelectedItemPosition()]) // get selected item

如果您需要以编程方式更改您的变量@Bindable

binding.getItem().setSelectedItemPosition(4);

否则您可以删除 @BindablenotifyPropertyChanged(BR.selectedItemPosition);

您可以使用任何 BaseObservable ObservableField Live Data 。它是由你决定。 我使用 BaseObservable因为它非常简单。,只需从 BaseObservable 扩展,现在所有字段都是可观察的。

关于java - Android spinner Data Binding 使用 XML 并显示选定的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37874091/

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