Android 爲了保持性能的高效 會在adapter中重用 convertView 相信這個有點經驗的Android開發同學都知道
但在項目裏 比如在一個listview 中 添加點擊的時間 需要獲得一個item的 position 可當這個item被複用了之後 在觸發點擊事件 雖然事件被觸發了但是並不能知道這個item 是那個view 因爲 它被複用了 相應的的這個position 也被複用了
這就會引起 position錯位現象 爲了解決這個問題 的思路類似在listadapter中使用viewholder一樣 需要設置一個tag來將position保存起來並將保存的convertview 和 保存的position 對應即可
具體如下需要 自定義一個onclicklistner()自定義的點擊事件如下:
package com.sohu.focus.middleware.adapter;
import android.view.View;
import android.view.View.OnClickListener;
public abstract class OnConvertViewClickListener implements OnClickListener {
private View convertViews;
private int[] positionIds;
public OnConvertViewClickListener(View convertView, int... positionIds) {
this.convertViews = convertView;
this.positionIds = positionIds;
}
@Override
public void onClick(View v) {
int len = positionIds.length;
int[] positions = new int[len];
for(int i = 0; i < len; i++){
positions[i] = (Integer) convertViews.getTag(positionIds[i]);
}
onClickCallBack(v, positions);
}
public abstract void onClickCallBack(View registedView, int... positionIds);
}
設置需要點擊時間的點擊監聽
convertView.setTag(R.id.tag_position, position);
並將position 重新保存到tag中 即可
在設置點擊時間的監聽的時間 將item和position的id傳入 進行對應
setOnClickListener(new OnConvertViewClickListener(convertView, R.id.tag_position)
類似的方法 也可以 用力處理 listView異步加載圖片出現圖片錯位的現象
我每一個圖片保存一個tag 當tag相等時加載圖片 否則就不加載
具體可參加如下博客
http://www.cnblogs.com/tiantianbyconan/p/3992843.html