看板 AndroidDev 關於我們 聯絡資訊
想請問各位大大 BaseExpandableListAdapter 的 getChildView(..., View convertView, ...); 因為我有多種 child view的 layout 每種 layout 都依據 group 做分類 switch( groupPosition){ case 0: convertView = new ChildView0(); break; case 1: convertView = new ChildView1(); break; case 2: ...........................2.........; default: break; } 因為不同 child view的關係 變成說,我每次不能只檢查 if(convertView == null){ 「這裡是上面的switch」; } else{ } 然後直接assign它的內容, 又因為 convertView 'reuse'的關係 下次我要使用的時候 變成我要先確定 convertView 的 type 以 groupPosition = 0 為例 if(convertView instanceof ChildView0){ 「因為型別對了才可以直接使用」 } else{ 「雖然 convertView != null, 但是因為型別不對所以重新new ChildView0」 //這樣就變成完全沒用到 convertView reuse的優點了? } 抱歉有點難表達 單純就這有甚麼好解法嗎? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.21.125.247 ※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1403232505.A.DA2.html
passli:用一個layout.xml 然後把你全部要的view 都寫進去 06/20 12:23
passli:再判斷那一個要show,其他gone掉 06/20 12:24
issuemylove:謝謝給的方向! 我試試看 06/20 13:58
okskygo:getChildType() and getChildTypeCount() 06/20 14:19
jknm0510a:你用polymorphism去解這個問題就一切都解決了 06/20 15:00
jknm0510a:converView用父class宣告,再依照不同的new不同的child 06/20 15:01
jknm0510a: class 06/20 15:01
issuemylove:plymorphism的前提是View內容一樣QQ 我是要有不同的 06/20 15:17
issuemylove:view 06/20 15:17
issuemylove:然後因為convertview reuse的關係 所以會出錯 06/20 15:18
zerofinal:一樓的方法不行嗎!?全部塞在同一個layout 06/20 16:43
zerofinal:然後塞值進去adapter, 再改寫adapter讓要顯示的layout 06/20 16:45
zerofinal:visible就可以啦 06/20 16:45
issuemylove:1F的方法可以^^ 06/20 16:55
givemepass:1f的做法是很標準的Holder使用法 只有第一次inflate 06/20 21:44
givemepass:稍微慢一點而已 06/20 21:44