Android 从ArrayAdapter获取原始ArrayList

Android 从ArrayAdapter获取原始ArrayList,android,Android,如何从Android中的ArrayAdapter检索底层ArrayList 这是可能的还是我需要单独跟踪它们 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>()); ArrayList<String> underlying = ArrayAdapter=

如何从Android中的ArrayAdapter检索底层ArrayList

这是可能的还是我需要单独跟踪它们

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
ArrayList<String> underlying = 
ArrayAdapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,new ArrayList());
ArrayList基础=

您可以这样做来获取底层的
ArrayList

ArrayList<String> underlying =  = new ArrayList<String>();
for (int i = 0; i < adapter .getCount(); i++)
    underlying .add(adapter .getItem(i));
ArrayList-underlined==new-ArrayList();
对于(inti=0;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);
//适配器声明
类MyArrayAdapter扩展了ArrayAdapter{}
//外部声明的ArrayList:
ArrayList myList=新的ArrayList();
//适配器实例化(在活动中)
MyArrayAdapter=新的MyArrayAdapter(此,myList);

这很简单。您需要获取适配器并使用clear()方法


这是理想的解决方案吗?这样你实际上可以得到原始arrayList的克隆,所以这取决于你的需要。@androiddeveloper:是的,这取决于你的需要。所以我不说这是理想的解决方案,但可以用来得到
arrayList
 ((myArrayAdapter)myListView.getAdapter()).clear();