2016-08-25 13 views
0

我有一個listview。裏面有兩種viewholder,我用setTag(int key,object tag)把它放到convertview中。但是當我調用getTag(int key)來獲取持有者時,然後返回null。該代碼是這樣的:ListView.getTag()返回null

@Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     HistoryViewHolder holder = null; 
     HistoryMoreViewHolder moreHolder = null; 
     if (view == null ) { 
      if (getItemViewType(i) == item_type_goin) { 
       view = LayoutInflater.from(InputSearchActivity.this).inflate(R.layout.truck_route_history_item_more, viewGroup, false); 
       moreHolder = new HistoryMoreViewHolder(); 
       moreHolder.tv_name = (TextView) view.findViewById(R.id.tv_name); 
       moreHolder.tv_location = (TextView) view.findViewById(R.id.tv_location); 
       moreHolder.ll = (LinearLayout) view.findViewById(R.id.ll); 
       view.setTag(R.id.history_first_item, moreHolder); 
      } else { 
       view = LayoutInflater.from(InputSearchActivity.this).inflate(R.layout.truck_route_history_item, viewGroup, false); 
       holder = new HistoryViewHolder(); 
       holder.tv_name = (TextView) view.findViewById(R.id.tv_name); 
       view.setTag(R.id.history_second_item, holder); 
      } 
     } else { 
      if (getItemViewType(i) == item_type_goin) { 
       moreHolder = (HistoryMoreViewHolder) view.getTag(R.id.history_first_item); 
       LogUtil.d(moreHolder + ":moreHolder"); 
      } else { 
       holder = (HistoryViewHolder) view.getTag(R.id.history_second_item); 
      } 
     } 
     if (getItemViewType(i) == item_type_goin) { 
      moreHolder.tv_location.setText(saveLocations.get(i).getLocation()); 
      moreHolder.tv_name.setText(saveLocations.get(i).getName()); 
     } else { 
      holder.tv_name.setText(saveLocations.get(i).getName()); 
     } 

     return view; 
    } 
} 

class HistoryViewHolder { 
    TextView tv_name; 
} 

class HistoryMoreViewHolder { 
    TextView tv_name; 
    TextView tv_location; 
    LinearLayout ll; 
} 

但是,當我改變,如果條件一樣

if (view == null || view.getTag(R.id.history_second_item) == null || 
    view.getTag(R.id.history_first_item) == null ) 

我可以得到持有人回來了,誰能告訴我爲什麼?

該listview沒有足夠的項目scorll,所以它不是重用問題。

回答

0

這是因爲非空viewgetView可能是另一個指數(ListView控件可以重新使用舊的視圖來顯示新的項目),你應該喜歡當view == null重新初始化它。

0

我看到的問題是您有兩種類型的單元格場景。如您所知,這些列表視圖在您滾動時重用單元格。

這是第一次,你會

if (view == null ) { 

得到一個空值在那裏你會創建一個新的細胞,然後通過創建方案中的新觀點持有者。

HistoryViewHolder類型的單元格在HistoryMoreViewHolder的索引處得到重用時,會出現此問題。

+1

我的listview沒有足夠的項目scorll.so它不是重用問題 – kelvin1757

+0

@ kelvin1757你檢查過嗎?你的列表中有多少項目以及getView被調用的次數? –