今天遇到一个点击item 中按钮删除对应的item的需求,那么问题来了,按钮在Adapter 视图中,按理说点击事件如果在Adapter中实现的话会无法调用自身listView 刷新数据源的方法,好了不多说了,先上效果:
其实我的实现方法就是把删除按钮的点击事件放在对应的Activity中实现,那么问题又来了,我们怎么知道点击的是哪个item中的按钮?后来我发现一个神奇的东西 tag ,有这东西做标识当然就知道点击的是哪个item中的按钮了,item的按钮是这样的:
//设置回调监听
activityAllCategory. shopping_lv_delete.setOnClickListener(onDelItem);
activityAllCategory.shopping_lv_delete.setTag(position);
activityAllCategory.jia = (Button) convertView.findViewById(R.id.jia);
//设置回调监听
activityAllCategory. jia.setOnClickListener(addCount);
activityAllCategory.jia.setTag(position);
activityAllCategory.jian = (Button) convertView.findViewById(R.id.jian);
//设置回调监听
activityAllCategory. jian.setOnClickListener(jianCount);
activityAllCategory.jian.setTag(position);
convertView.setTag(activityAllCategory);
/**
*定义监听接口
*/
public void setOnDelItem(View.OnClickListener onDelItem) {
this.onDelItem = onDelItem;
}
public void add(View.OnClickListener addCount) {
this.addCount = addCount;
}
public void jian(View.OnClickListener jianCount) {
this.jianCount = jianCount;
}
对应的Activity 中的代码是这样的:
adapter = new MyCarAdapter(getContext(), mylist);
adapter.setOnDelItem(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInfo(Integer.parseInt(v.getTag()+""));
}
});
adapter.add(new View.OnClickListener() {
@Override
public void onClick(View v) {
int amount = mylist.get((Integer) v.getTag()).getAmount();
amount++;
mylist.get((Integer) v.getTag()).setAmount(amount);
adapter.notifyDataSetChanged();
}
});
adapter.jian(new View.OnClickListener() {
@Override
public void onClick(View v) {
int amount = mylist.get((Integer) v.getTag()).getAmount();
if(amount>=2){
amount--;
mylist.get((Integer) v.getTag()).setAmount(amount);
adapter.notifyDataSetChanged();
}else{
Toast.makeText(getActivity(), "购物车中只有一个商品,不欲购买可以点击删除!", Toast.LENGTH_SHORT).show();
}
}
});
这样就OK了,有不懂得地方可以给我留言哦~