如何从 Android 中的 ArrayAdapter 检索底层 ArrayList?
这是可能的还是我需要单独跟踪它们?
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
ArrayList<String> underlying =
如何从 Android 中的 ArrayAdapter 检索底层 ArrayList?
这是可能的还是我需要单独跟踪它们?
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
ArrayList<String> underlying =
你可以这样做来获得底层ArrayList
ArrayList<String> underlying = = new ArrayList<String>();
for (int i = 0; i < adapter .getCount(); i++)
underlying .add(adapter .getItem(i));
我认为,如果您没有此功能,您可以通过扩展 BaseAdapter 来轻松创建适合您需求的适配器。
只需通过其 CTOR 将列表发送到适配器,然后您可以稍后从适配器外部更改它,并在完成后调用 notifyDataSetChanged。
不过要注意:如果您有适配器列表的原始实例,您应该处理多线程问题(或仅通过 UI 线程访问它),如果您修改它(尤其是添加/删除项目),您应该总是调用 notifyDataSetChanged 。
不同的方法,但很可能满足您的需求:从“ArrayAdapter”扩展您的适配器,在外部声明数组,然后在创建适配器时将数组传递给构造函数
//Adapter Declaration
class MyArrayAdapter extends ArrayAdapter<MyType> {}
//Externally declared ArrayList:
ArrayList<MyType> myList = new ArrayList<MyType>();
//Adapter Instantiation (in your activity)
MyArrayAdapter adapter = new MyArrayAdapter(this, myList);
这很容易。您需要获取适配器并使用 clear() 方法。
((myArrayAdapter)myListView.getAdapter()).clear();