2013-03-04 53 views
2

我有一個ListView適配器,根據行項目的類型設置不同的佈局。回收具有不同行佈局的ListView行

如果我使用一個持有人回收我的行,如下面的代碼所示,我想我會得到一些錯誤,因爲對於一個循環的行,我會得到最新的非循環行的佈局,這可能不會屬於同一類型。

我應該避免在這種情況下回收行嗎?我還有什麼其他選擇?

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    MyHolder holder = null; 

    int type = getItemViewType(position); 

    if(row == null) 
    {   
     holder = new MyHolder(); 

     LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); 

     if(type == TYPE_1){ 
      row = inflater.inflate(R.layout.layout_type_1, parent, false); 
     } 
     else if(type == TYPE_2){ 
      row = inflater.inflate(R.layout.layout_type_2, parent, false); 
     }    
     else { 
      row = inflater.inflate(R.layout.layout_type_3, parent, false); 
     } 

     row.setTag(holder); 
    } 
    else 
    { 
     holder = (MyHolder)row.getTag(); 
    } 

    /* ... */ 
} 
+0

你是否重寫getViewTypeCount和getItemViewType? – jimmithy 2013-03-04 16:16:20

+0

@jimmithy:是的,我做 – jul 2013-03-04 16:18:45

+0

回收RecyclerView和多行佈局示例演示http://code2concept.blogspot.in/2015/10/android-multiple-row-layout-using.html回收處理回收站本身 – nitesh 2015-10-15 05:26:59

回答

5

始終回收行!您的getItemViewType(和getViewTypeCount)的實施指示ListView什麼時候回收什麼類型的視圖,以避免混淆。

您的代碼片段看起來不錯。所以,這一切都應該工作。唯一稍微奇怪的部分是if(type == TYPE_3)。你的意思是if(type == TYPE_2)

問題是:你現在的代碼有問題/例外嗎?

+0

是的,如果(type == TYPE_3)是一個錯字。謝謝。 – jul 2013-03-04 16:21:06

+0

@Streets Of Boston,很抱歉這種方式。這對我來說非常緊迫。請幫我看看這裏https://stackoverflow.com/questions/47897770/issues-in-using-edittext-in-row-of-recyclerview-and-the-textwatcher-on-edittext?noredirect=1#comment82874592_47897770 – Shambhu 2017-12-23 13:27:00

2

如果我回收利用持有人行我的,如下面的代碼,我 想我會得到一些錯誤,因爲回收的行我會得到 佈局最新的非循環排,這可能不是相同的 類型。

如果你指的是row == null檢查,那麼就沒有問題,因爲ListView將根據getItemViewType()方法給你正確convertView

如果您指的是MyHolder類,這又不成問題,因爲持有人被設置爲行視圖的標記,並且如果ListView爲您提供了正確的再循環行視圖,則持有人標記也將具有適當的爲該類型的行初始化字段。而且,由於您應該根據行類型處理MyHolder,因此您將訪問已初始化的字段,這不是問題。您的MyHolder類應具有所有視圖的引用,您的三種類型的行公開,以便您可以將它們放在哪裏。

所以保持回收機制。

+0

是,我指的是行== null檢查。感謝您的解釋。我會接受波士頓街頭的答案,因爲他是第一個。 – jul 2013-03-04 16:24:26

+0

@Luksprog,對不起,這樣ping。這對我來說非常緊迫。請幫助我在這裏https://stackoverflow.com/questions/47897770/issues-in-using-edittext-in-row-of-recyclerview-and-the-textwatcher-on-edittext?noredirect=1#comment82874592_47897770 – Shambhu 2017-12-23 13:30:25