ListView 按钮点击状态混乱之解决

来源:互联网 发布:淘宝有意思的小玩意 编辑:程序博客网 时间:2024/05/09 03:54
public class MyAdapter extends BaseAdapter {private List lists;private Context context;private ViewHolder holder;// 用来记录按钮状态的Mappublic static Map<Integer, Boolean> isChecked;  public MyAdapter(Context _Context,List _list){this.lists = _list;this.context = _Context;init(); // 一定要在这里调用,在构造Adapter对象时方便初始化}class ViewHolder {private TextView mTV;private Button   mBT;}// 初使化操作,默认都是falseprivate void init() {isChecked = new HashMap<Integer, Boolean>();for (int i = 0; i < lists.size(); i++){isChecked.put(i, false);}}@Overridepublic int getCount() {return lists.size();}@Overridepublic String getItem(int position) {return (String) lists.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView!=null){holder = (ViewHolder) convertView.getTag();}else {convertView = LayoutInflater.from(context).inflate(R.layout.item, null);            holder = new ViewHolder();            holder.mBT = (Button) convertView.findViewById(R.id.btn);            holder.mTV = (TextView) convertView.findViewById(R.id.tv);            convertView.setTag(holder);}String text = (String) lists.get(position);if (text != null){holder.mTV.setText(text);}holder.mBT.setOnClickListener(new btClick(position));/* * 在复用时对其进行判断,根据其状态来显示相应的内容,这样在滑动时条目就不会再错乱了 */if (isChecked.get(position) == true){holder.mBT.setBackgroundResource(R.drawable.jc_yes);}else {holder.mBT.setBackgroundResource(R.drawable.jc_no);}return convertView;}/* * 此为listview条目中的按钮点击事件的写法 */class btClick implements OnClickListener{private int position;public btClick(int pos){  // 在构造时将position传给它这样就知道点击的是哪个条目的按钮  this.position = pos;}@Overridepublic void onClick(View v) {int vid=v.getId();            if (vid == holder.mBT.getId()){            if (isChecked.get(position) == false){                   isChecked.put(position, true);   // 根据点击的情况来将其位置和相应的状态存入                holder.mBT.setBackgroundResource(R.drawable.jc_yes);                   } else if (isChecked.get(position) == true){            isChecked.put(position, false);  // 根据点击的情况来将其位置和相应的状态存入                   holder.mBT.setBackgroundResource(R.drawable.jc_no);                   }            notifyDataSetChanged();            }}}}
0 0
原创粉丝点击