通过对convertView设置tag,来保存当前点击的pos
为解决点击item无法获取当前的pos,同时长按点击和点击两个动作,无法再adapter里很好的区分,设计OnConvertViewClickListener继承View.OnClickListener,对convertView和pos保存,pos保存在convertView的tag内,getTag后,回调clickCallback响应点击
public abstract class OnConvertViewClickListener implements View.OnClickListener {
private View convertView;
private int[] positionIds;
public OnConvertViewClickListener(View convertView, int... positionIds) {
this.convertView = convertView;
this.positionIds = positionIds;
}
@TargetApi(Build.VERSION_CODES.DONUT)
@Override
public void onClick(View v) {
int len = positionIds.length;
int[] positions = new int[len];
for (int i = 0; i < len; i++) {
positions[i] = (int) convertView.getTag(positionIds[i]);
}
onClickCallBack(v, positions);
}
public abstract void onClickCallBack(View registedView, int... positionIds);
}
同理对longClick也做相同的设置:
public abstract class OnConvertViewLongClickListener implements View.OnLongClickListener {
private View convertView;
private int[] positionIds;
public OnConvertViewLongClickListener(View convertView, int... positionIds) {
this.convertView = convertView;
this.positionIds = positionIds;
}
@Override
public boolean onLongClick(View v) {
int len = positionIds.length;
int[] positions = new int[len];
for (int i = 0; i < len; i++) {
positions[i] = (int) convertView.getTag(positionIds[i]);
}
onLongClickCallBack(v, positions);
return false;
}
public abstract void onLongClickCallBack(View registedView, int... positionIds);
}
之后再adapter,调用view.setOnClickListener(new OnConvertViewClickListener(convertView, POSITION) ,其中POSITION是常量,用来保存tag的标识,(注意在getView初始化setTag(POSITION, position),这样才能正确的获取点击pos)