0

我有一個ExpandableListAdapter動態加載組的組和子項目。我希望能夠創建複雜的邏輯來檢查子項目。一些兒童項目將是多項選擇,有些將是單一選擇。當您選擇單個選項時,所有多項選項都將被取消選中。我對多項選擇項沒有任何問題,但是當選中一項選項時,我無法取消選擇項目。任何建議是受歡迎的。ExpandedListAdapter與CheckedTextView - 複雜的選擇邏輯

我不包括源代碼,因爲它非常標準,但可以根據請求提供。

+0

你如何取消選擇「多項目」?您可能需要重新獲取可見視圖,以便更改可見。 – Simas

+0

我一直無法取消選擇多個項目。我如何重新獲取可見視圖? –

回答

1

要標記哪些項目是多個不是,我會在適配器內創建一些布爾方法。如果需要在布爾數組的幫助下,將每個多項目的值保存在裏面。

和你getChildView內(),你可以簡單地做這樣的事情

if (multiples.get(groupView).get(childView)) 
    myView.setChecked(false); 

要刷新可見的項目,你可能需要打電話notifyDataSetChanged()您的適配器上。

+0

完美地工作,謝謝。簡直不敢相信我在這上面花了太多時間。 –

+0

唯一的問題是,選中的框在屏幕旋轉後不會持續。我如何解決這個問題? –

+0

要麼創建一個單獨的數組來保存所有複選框的選中狀態並將該數組設置爲靜態。或者使用onSaveInstanceState來保存哪些複選框被保存,並且在onCreate **內如果** savedInstanceState不爲null,則獲取複選框的狀態並使用它們。 – Simas

0

您使用的是onCheckChangeListener嗎?如果是這樣,你可能會遇到一些問題。首先,如果您的多項選擇項在您點擊它們時未被取消選中,這是因爲您在onCheckChangedisChecked = false之間調用時沒有明確調用setChecked(false)

如果您希望在選擇單個選項時取消選擇多項選項,則還必須在單選項監聽器的onCheckChanged方法中爲所有多項選項調用mMultiChoiceItem.setChecked(false)

+0

我的問題是,我不知道如何獲得mMultipleChoiceItems的列表,以便我可以調用setChecked。我嘗試過在適配器和內部活動中做它,但沒有運氣。理想將是一個函數,將返回給定的組和子索引的mMultipleChoiceItem。 –

+0

你必須使用資源ID。理想情況下,所有的列表元素視圖都應該包含指向多項選擇項的相同ID。因此,要訪問該視圖,請嘗試類似'mListAdapter.getView(index,null,mListView).findViewById(R.id.multi_choice_item)',它將返回對多視圖項目的引用,並將其視爲「視圖」。您可以遍歷列表適配器以在必要時獲取所有這些視圖。 – tep