Android Studio 自定义 ArrayAdapter 传递 HashMap 而不是 ArrayList

Android Studio Custom ArrayAdapter passing HashMap instead of ArrayList

我有一个自定义适配器,我想传递一个 HashMap,其中 Foo 是一个自定义对象

HashMap<String, Foo> foos = new HashMap<String, Foo>();
//populate foos and pass to adapter
fooAdapter = new FooAdapter(getContext(), foos);

我的适配器是这样的

public class FooAdapter extends ArrayAdapter<Foo> {
    public FooAdapter(Context context, HashMap<String, Foo> foos) {
        super(context, R.layout.my_layout, foos);
    }

我的问题是将 foos 传递给基本构造函数。我怎样才能让它接受 HashMap 而不是 ArrayList。如果我将它作为 ArrayList 传递,它工作正常,但 HashMap 对我的应用程序会更好,因为我使用的是 Firebase 并且在运行时需要密钥。

使用不可能的 ArrayList

那是因为 ArrayAdapter 没有接受 HashMap 的构造函数。如果您在第 105 行看到 ArrayAdapter source code,您会看到它在内部使用 List<T> 来存储其项目。

如果你想使用 HashMap 而不是 List 只需通过扩展 BaseAdapter 创建你自己的 HashMapAdapter 类似于源代码中所示的,除了你替换ListHashMap 并通过代码相应地更新此更改。