android开发之listview中放入checkbox实现单选

listview中checkbox的单选总结出两种实现方法,仅供参考

方法1:给checkbox做标记

注释:这个方法不便于后面的数据接入

public static int temp = -1;

checkBox = (CheckBox) parentView.findViewById(R.id.cbox_isselect);
   //做个标记
   checkBox.setId(groupPosition);

   //checkbox监听

   checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

     if (isChecked)

     {
      // 这段代码来实现单选功能
      if (temp != -1)

        {
         CheckBox tempButton = (CheckBox) MyRingBoxActivity.this.findViewById(temp);
         if (tempButton != null)

            {
             tempButton.setChecked(false);
            }
         }
      //得到当前的position
      temp = buttonView.getId();

     } else {
      temp = -1;
     }


    }
   });

 

   //将选中的设置为true

   if (temp == groupPosition) {
    checkBox.setChecked(true);
   }

 

方法二:把所有的选中未选中的信息放入到HashMap中通过适配器的构造方法传入

注释:本以为这种方式会性能比较差,不过在真机上的效果还是可以的

public RingBoxElvAdapter(Context context, List parent_data, List> child_data,HashMap isSelect) {
   this.mContext = context;
   this.inflater1 = LayoutInflater.from(context);
   this.inflater2 = LayoutInflater.from(context);
   this.parent_data = parent_data;
   this.child_data = child_data;
   this.isSelect=isSelect;
  }

 

 

checkBox = (CheckBox) parentView.findViewById(R.id.cbox_isselect);
   
   checkBox.setChecked(isSelect.get(groupPosition));
   //监听
   checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

     //先把链表中的数据取代掉
     isSelect.put(groupPosition, isChecked);
     if(buttonView.isChecked())
     {
      for(int i=0;i       {

       //把其他的checkbox设置为false
       if(i!=groupPosition){
        isSelect.put(i, false);
       }
      }
     }
     //通知适配器更改
     RingBoxElvAdapter.this.notifyDataSetChanged();
     
    }
   });

 

你可能感兴趣的:(android)