多选、全选成员加选择数量变化监听

在做一些和人相关的app的时候,往往少不了对人进行选择的功能,有时需要单选、有时需要多选、或者连带着选择人数的变化,这里先贴多选人数带数量监听的代码。也是先上图


这个功能的实现很简单,主要就是在adapter中提供获取选中数字变化的借口方法,在activity里通过对总的集合尺寸和已选数量的大小进行比较,从而在界面上进行直观的展示

代码的实体类很简单,只有名称和是否选中的标记两个属性

// activity 
public class Activity_Check_Person extends Activity {
    private ListView listview;
    private TextView tv_selcted_number;
    private MemberAdapter adapter;
    private List
   
   
    
     memberBeanList = new ArrayList<>();
    private CheckBox cb_check_all;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_check__person);

        setBaseData();
        initId();
        adapter = new MemberAdapter(this, memberBeanList);
        listview.setAdapter(adapter);
        setListener();
    }

    private void setListener() {
        cb_check_all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!cb_check_all.isChecked()) {//之前没选中
                    cb_check_all.setChecked(false);
                    for (int i = 0; i < memberBeanList.size(); i++) {
                        memberBeanList.get(i).setSelected(false);
                    }
                } else {
                    cb_check_all.setChecked(true);
                    for (int i = 0; i < memberBeanList.size(); i++) {
                        memberBeanList.get(i).setSelected(true);
                    }
                }
                adapter.notifyDataSetChanged();
            }
        });
        MemberAdapter.SelectedallListener listener = new MemberAdapter.SelectedallListener() {
            @Override
            public void selected(boolean b, int count) {
                if (memberBeanList != null && memberBeanList.size() > 0) {
                    Log.e("size()", "====" + memberBeanList.size() + "count" + "======" + count);
                    if (memberBeanList.size() == count) {
                        cb_check_all.setChecked(true);
                    } else {
                        cb_check_all.setChecked(false);
                    }

                    tv_selcted_number.setText("已选" + "(" + count + ")人");
                }
            }
        };
        adapter.setListener(listener);
    }

    private void initId() {
        listview = (ListView) findViewById(R.id.lv_member);
        tv_selcted_number = (TextView) findViewById(R.id.tv_selcted_number);
        cb_check_all = (CheckBox) findViewById(R.id.cb_check_all);

    }

    /**
     * 设置基本数据
     */
    private void setBaseData() {
        String[] names = {"张艺萌", "蘑菇力", "李飞", "果果", "小月月", "尼古拉斯", "巴托姆", "麻麻咪", "艾丽斯", "张木国"};
        for (String name : names) {
            MemberBean bean = new MemberBean();
            bean.setName(name);
            memberBeanList.add(bean);
        }
    }
}

 布局 如下

    
    

    
    

    
     
     


        
      
      

        
      
      
    
     
     


    
     
     

    
     
     

        
      
      

        
      
      

            
       
       

            
       
       
        
      
      
    
     
     

    
    
// item item布局 

    
    

    
    

    
     
     

        
      
      

        
      
      
    
     
     

    
     
     

    
    

// 按钮 

    
    

    
    
    
     
     
    
     
     

    
    
// aadapter  
public class MemberAdapter extends BaseAdapter {
    private List
    
    
     
      memberBeanList;
    private Context context;
    private LayoutInflater layoutInflater;
    private SelectedallListener listener;

    public MemberAdapter(Context context, List
     
     
      
       memberBeanList) {
        this.memberBeanList = memberBeanList;
        this.context = context;
        layoutInflater = LayoutInflater.from(context);
    }

    public void setListener(SelectedallListener listener) {
        this.listener = listener;
    }

    public interface SelectedallListener {
        void selected(boolean b, int count);
    }

    @Override
    public int getCount() {
        return memberBeanList.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = layoutInflater.inflate(R.layout.item_list, parent, false);
            holder.tv_taskmember_name = (TextView) convertView.findViewById(R.id.tv_name);
            holder.rb_member = (CheckBox) convertView.findViewById(R.id.rb_check);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        final MemberBean memberBean = memberBeanList.get(position);
        holder.tv_taskmember_name.setText(memberBean.getName());
        holder.rb_member.setSelected(memberBean.isSelected());//设置按钮的选中状态
        if (memberBean.isSelected()) {
            holder.rb_member.setBackgroundResource(R.drawable.radiobtn_checked);
        } else {
            holder.rb_member.setBackgroundResource(R.drawable.radiobtn_normal);
        }
        //当点击复选按钮时候,改变实体类的属性
        holder.rb_member.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                memberBean.setSelected(b);
                listener.selected(b, selectedNumber());
                notifyDataSetChanged();//刷新adapter
            }
        });
        return convertView;
    }

    class ViewHolder {
        TextView tv_taskmember_name;
        CheckBox rb_member;
    }

    /**
     * 选中数据的个数
     *
     * @return
     */
    private int selectedNumber() {
        int count = 0;
        for (MemberBean bean : memberBeanList) {
            if (bean.isSelected()) {
                count = count + 1;
            }
        }
        return count;
    }

    /**
     * 更新数据
     *
     * @param list
     */
    public void notifyAdapter(List
      
      
       
        list) {
        this.memberBeanList = list;
        notifyDataSetChanged();
    }
}




      
      
     
     
    
    
   
   
代码逻辑也很简单哦,之前也做过单选的功能,网上的代码也有很多,但我个人觉得对于这类的功能,用标记来实现最简单,虽然很蠢O(∩_∩)O哈哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值