我有一个ListFragment
,由ArrayAdapter
支持,并由Loader
填充。当用户点击其中一个项目时,我想将对所选项目的引用以及其他列表项目传递给另一个片段。我的问题是如何从适配器中获取所有项目?下面是我看到的可能性:获取ArrayAdapter中的所有项目
1.保持一个参考后盾List
创建适配器像这样:
List<DomainObject> items = new ArrayList<DomainObject>();
listAdapter = new ArrayAdapter<DomainObject>(getActivity(), R.layout.mine, items);
,然后简单地传递items
或它的一个副本到下一个活动。
我看到的缺点是,我依赖的是无证的事实,即我传递给构造函数的同一列表包含后面的项目。
2.迭代通过适配器
当单击某个项目,遍历适配器,建立名单。这似乎是不必要的工作量。这些项目包含在适配器中的List
中,我将每个项目手动复制到新列表中。
3.保持项目的单独列表添加到适配器
将项目添加到适配器前时,将它添加到一个单独的列表,我的片段维护。这也是浪费,因为项目列表被复制到ArrayAdapter
和片段中。
虽然这篇文章大多是好的,但我会忽略他的整个线程安全部分。他完全错误地假设为什么会有锁(由于在后台线程中发生过滤),并且如果在除UI线程之外的任何其他任何情况下调用notifyDataSetChanged(),则ArrayAdapter已经崩溃。 – 2014-12-09 01:04:34
@ scompt.com我认为你发布的链接是错误的解释ArrayAdapter。这似乎只解释了ArrayAdapter。我有点困惑... –
theMfromA
2015-06-12 08:49:38
从您链接的页面...“只能显示文字。” =>错了。 “强制您提供CharSequence项目列表...”=>错误“要求您提供仅包含TextView”的布局资源=>错误。几乎所有的假设都是错误的...我不是说ArrayAdapter比BaseAdapter更好,但基本知识是错误的。 – Loenix 2016-08-12 09:20:08