我刚刚访问了Android上的beta Databinding 库。我浏览了开发人员的指南,然而,我仍然不确定,如何绑定,例如,微调器到自定义集合。问题是,如果可能的话。
以下是使所有事情都有效的步骤。
答案 0 :(得分:2)
我错了,即使我实现了它!Spinner
没有属性android:entries
,因此不知道如何将值绑定到Spinner。
entries属性采用CharSequence
数组。如果你想让它采取任意的集合:
@BindingAdapter({"android:entries"})
public static void setEntries(AbsSpinner view, List<String> entries) {
if (entries != null) {
SpinnerAdapter oldAdapter = view.getAdapter();
boolean changed = true;
if (oldAdapter != null && oldAdapter.getCount() == entries.size()) {
changed = false;
for (int i = 0; i < entries.size(); i++) {
if (!entries.get(i).equals(oldAdapter.getItem(i))) {
changed = true;
break;
}
}
}
if (changed) {
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(view.getContext(),
android.R.layout.simple_spinner_item,
entries.toArray(new String[entries.size()]);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
view.setAdapter(adapter);
}
} else {
view.setAdapter(null);
}
}
您应该使用ObservableList
而不是List
并添加一个侦听器,每次值更改时都会更新ArrayAdapter。
因为它是AdapterView
,您通常会使用setAdapter()
方法。因此,您可以使用自动生成的属性app:adapter="@{myAdapter}"
来使用setAdapter()
方法。
如果您想使用&#34;条目&#34;等自定义属性,可以使用BindingAdapter
创建一个。在应用程序的类中 - 与哪个类无关,但按照惯例,这些类按目标视图类型分组:
public class SpinnerAdapter {
@BindingAdapter("entries")
public static void setEntries(Spinner view, final List<String> values) {
SpinnerAdapter spinnerAdapter = new SpinnerAdapter() {
// Use values to implement the SpinnerAdapter
}
view.setAdapter(spinnerAdapter);
}
}
如果要使用自定义集合,请替换List&lt; String&gt;无论您的自定义集合类型是什么。如果您希望它是可观察的,则Adapter支持数据更改通知,因此请确保将侦听器添加到您提供的任何列表(例如ObservableList
)并通知适配器更改。