自定义可观察集合android

发胖

我刚看过Android上的beta版数据绑定库。我浏览了开发人员指南,但仍然不确定如何将微调器绑定到自定义集合。问题是,是否有可能。


这是使所有事物正常工作的步骤。

  • 创建一个扩展ObservableList.OnListChangedCallback的类。
  • 我们要绑定到微调器(或其他基于适配器的视图)的自定义集合应扩展ObservableList(或其同级兄弟),并具有addOnListChangedCallback(onListChangedCallback olcc)。
  • 创建一个与我们的自定义集合一起使用的自定义适配器。ObservableList.OnListChangedCallback应该在我们要侦听的事件中通知适配器。
  • 用开发人员指南编写,创建相应视图xml的注释:数据部分中的import +变量,微调器中的app:adapter =。
  • 使用@BindingAdapter()批注为我们的自定义适配器创建自定义静态设置器。
乔治·芒特

Spinner没有属性,android:entries因此不是将值绑定到微调框的方法。即使我实施了它,我还是错了!

entrys属性采用的数组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()方法。

如果要使用“ entries”之类的自定义属性,则可以使用来创建一个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 <String>替换为您的自定义集合类型。如果您希望它可观察,则Adapter支持数据更改通知,因此请确保将侦听器添加到您提供的任何列表中(例如ObservableList),并通知适配器更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Xamarin表单-自定义JSON的可观察集合

自定义高阶可观察映射

WPF双向数据绑定到可观察集合中的自定义数据类型

在自定义绑定中扩展可观察对象

如何更新自定义绑定中的可观察对象?

Angular:HttpClient服务和可观察的自定义类型

KnockoutJS:访问自定义组件外部的可观察变量

使用可观察的插件创建2种方式的自定义绑定

创建自定义的Knockout绑定,以动态添加已过滤可观察数组中的绑定元素

序列化rxjs可观察到的自定义业务对象

angular4:使用valueChanges的自定义“等于”验证可观察到

从敲除3.2中的自定义组件可观察到的更新

RxJava链接的可观察对象和错误处理(自定义异常传播)

自定义绑定到可观察数组,不调用更新函数

带有可观察对象的jQuery fadeIn fadeOut的剔除自定义绑定

如何从包含自定义类型的可观察数组中检索值?

将Firestore可观察对象投射到自定义对象

引用可观察到的自定义html id的敲除

RxJS groupBy通过ngrx效果可观察到的自定义数组

编写自定义ngrx运算符并返回源可观察类型

自定义模板剑道网格-调用相同的可观察到的

在自定义绑定处理程序中使用不可观察的对象

可观察集合的继承

更改另一个计算的可观察值时触发一个可观察值的自定义扩展程序

如何在表单上实现自定义验证器,其中验证逻辑需要来自可观察对象的数据

将可观察的集合与可观察的集合合并

Firestore - 嵌套集合的自定义对象

如何排序自定义实体的集合?

Firestore集合到自定义ListView