我有一個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