2011-03-15 79 views
0

我想知道如何管理ListView中的視圖。如何在列表視圖中正確管理視圖

我有一個是對的ListView設置自定義適配器,該適配器將覆蓋getView方法

public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      v = mInflater_.inflate(R.layout.news_newsentry, null); 
     } 

     final NewsItem newsItem = getItem(position); 

     if (newsItem != null) { 
      // Do stuff 
     } 

     return v; 

    } 

但問題是,當用戶點擊一個項目,我稍微改變視圖,使其大。它運作良好,但是當物品視圖被回收時,它保持「大」的高度來顯示另一個物品。

爲了防止這種情況,我改變了代碼來創建一個新的視圖每次

變化:

View v = convertView; 
    if (v == null) { 
     v = mInflater_.inflate(R.layout.news_newsentry, null); 
    } 

通過

View v = mInflater_.inflate(R.layout.news_newsentry, null); 

現在的問題是,當項目從消失列表並重新出現(列表滾動),視圖是全新的,高度設置爲「小」。

我的問題然後:如何管理項目視圖以保持其屬性,而不會搞亂其他視圖和視圖回收?

回答

0

我認爲你可以通過使用支持列表中的多個視圖類型的ListView來獲得你想要的結果。

在適配器的時候會實施類似

@Override 
    public int getItemViewType(int position) { 
     int type = 0; 
     if (position == mySelectedPosition) { 
      type = 1; 
     } 
     return type; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 2; 
    } 

其他方法那麼你的getView方法將被交到正確類型項目的位置的示意圖。也就是說,選定的項目總是會被賦予一個「大」的視圖來重用。

不建議出於性能和內存方面的原因每次都創建一個新的View。

+0

好的,這似乎是一個解決方案,但:如果可以有任何配置每個列表項目。我是否必須自己跟蹤所有這些信息? – Jonas 2011-03-16 19:32:45