我有一個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,所以它不是重用問題。
我的listview沒有足夠的項目scorll.so它不是重用問題 – kelvin1757
@ kelvin1757你檢查過嗎?你的列表中有多少項目以及getView被調用的次數? –