今天遇到一个点击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了,有不懂得地方可以给我留言哦~