[問題] ExpandableListView 多種 child view

作者: issuemylove (NotLove)   2014-06-20 10:48:23
想請問各位大大
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的優點了?
}
抱歉有點難表達
單純就這有甚麼好解法嗎?
謝謝!
作者: passli   2014-06-20 12:23:00
用一個layout.xml 然後把你全部要的view 都寫進去再判斷那一個要show,其他gone掉
作者: issuemylove (NotLove)   2014-06-20 13:58:00
謝謝給的方向! 我試試看
作者: okskygo (來)   2014-06-20 14:19:00
getChildType() and getChildTypeCount()
作者: jknm0510a (Kang)   2014-06-20 15:00:00
你用polymorphism去解這個問題就一切都解決了converView用父class宣告,再依照不同的new不同的childclass
作者: issuemylove (NotLove)   2014-06-20 15:17:00
plymorphism的前提是View內容一樣QQ 我是要有不同的view然後因為convertview reuse的關係 所以會出錯
作者: zerofinal (人生~)   2014-06-20 16:43:00
一樓的方法不行嗎!?全部塞在同一個layout然後塞值進去adapter, 再改寫adapter讓要顯示的layoutvisible就可以啦
作者: issuemylove (NotLove)   2014-06-20 16:55:00
1F的方法可以^^
作者: givemepass (λ)   2014-06-20 21:44:00
1f的做法是很標準的Holder使用法 只有第一次inflate稍微慢一點而已

Links booklink

Contact Us: admin [ a t ] ucptt.com