gpt4 book ai didi

java - 自定义可观察集合android

转载 作者:行者123 更新时间:2023-11-29 20:27:59 25 4
gpt4 key购买 nike

我刚刚了解了 Android 上的 beta Databinding 库。我浏览了开发人员指南,但我仍然不确定如何将微调器绑定(bind)到自定义集合。问题是,这是否可能。


以下是使一切正常运行的步骤。

  • 创建一个扩展 ObservableList.OnListChangedCallback 的类。
  • 我们想要绑定(bind)到微调器(或其他基于适配器的 View )的自定义集合应该扩展 ObservableList(或其兄弟)并具有 addOnListChangedCallback(onListChangedCallback olcc)。
  • 创建一个适用于我们的自定义集合的自定义适配器。ObservableList.OnListChangedCallback 应该在我们想要监听的事件中通知适配器。
  • 在开发人员指南中创建相应 View 的 xml 注释:数据部分中的 import + 变量和微调器的 app:adapter=。
  • 使用@BindingAdapter() 注释为我们的自定义适配器创建自定义静态 setter 。

最佳答案

Spinner 没有属性 android:entries 所以这不是将值绑定(bind)到 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()方法。

如果你想使用像“条目”这样的自定义属性,你可以使用 BindingAdapter 创建一个。在您的应用程序的一个类中——哪个类并不重要,但按照惯例,它们按目标 View 类型分组:

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 替换为您的自定义集合类型。如果您希望它是可观察的,适配器支持数据更改通知,因此请确保将监听器添加到您提供的任何列表(例如 ObservableList)并通知适配器更改。

关于java - 自定义可观察集合android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32310483/

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