2012-11-07 79 views
0

所以我一直試圖使用expandablelistview作爲我的應用程序的優雅界面,但我始終無法從中提取所需的行爲。當我點擊一個孩子時,我可以將其背景更改爲不同的顏色,或將文本更改爲不同的顏色,甚至可以更改文本本身。但是,當我滾動(使孩子離開可視區域)或摺疊/展開組時,無論我所做的更改經常消失。如何在可擴展列表視圖中對子項進行持續更改?

那麼,我該如何對孩子進行這些改變並讓他們堅持下去呢?謝謝。

更新:覆蓋ExpandableListAdapter的getChildView()方法,以適當更改子視圖結果工作得很好(即使沒有適配器的notifyDataSetChanged()方法)。我的問題是一個愚蠢的狀態switcharoo(我有他們在onChildClick但在getChildView向後)。

回答

0

Android上的listviews使用了一個非常重要的技術催化convertview,當一個視圖在滾動期間離開屏幕時,它被放置在屏幕上的其他地方並且數據部分被改變。它使我們不會製作1000個視圖,而是一次只能顯示屏幕上的7或8個視圖。但是這些視圖不能方便地返回到你想要的位置,這意味着你需要指定每個位置的內容,而不是讓它隱式地發生。

那麼,這是如何兌現?製作任何類型的數組列表或列表,以保存您的顏色狀態,文本狀態w.e.並使用任意方法標記這些方法(紅色在整數列表中爲等於3,或者在字符串列表中爲紅色=「紅色」)。然後很簡單,在getView()中指定如果arraylist中的相應位置說了什麼,請執行一些操作。但是你也需要調用notifydatasetchanged()刷新列表視圖。我建議你把它放在一些onclicklistener或其他東西上,因爲如果它在getView()中沒有邊界,它將會不必要地被稱爲很多

下一次,你向我展示代碼,我會告訴你代碼或沒有人會想要幫助你。這被不必要地詢問很多

+0

感謝您的迴應!這是相當豐富的。我一開始並沒有發佈代碼,因爲我認爲答案很簡單,可以用英文給出(我不完全正確)。我已經使用onChildClick和getChildView來進行我的更改,並且我看到了其他地方推薦的notifyDataSetChanged()。在您的建議中,我再次嘗試了它,但仍然導致我的expandablelistview停止響應任何點擊。在撰寫我對您的回覆(包含代碼)時,我發現了錯字/ switcharoo是我的問題。感謝您的時間。 – Uritziel

0

您需要堅持在全局變量的變化:

public void onGroupCollapsed(int groupPosition) { 
{ 

,然後從變量中讀取他們回來,他們創建了兒童在分配給您的意見

public void onGroupExpend (int groupPosition) { 
} 

或:

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
// assign new values/changes to your views before you return this view 

return v; 
} 
+0

我找不出如何獲取onGroupCollapse或onGroupExpand偵聽器中的子視圖。儘管我一直在使用getChildView,但在發現我的錯誤後,它似乎運作良好!感謝您的答覆! – Uritziel

相關問題