RecyclerView加CheckBox

本文介绍了如何在RecyclerView中结合CheckBox进行交互操作。通过创建自定义Adapter类和MainActivity,实现了点击显示位置信息、长按弹出对话框的功能。此外,还添加了全选和反选的逻辑,展示了如何在RecyclerView中实现选择项的批量操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Adapter类

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private  ArrayList<String> list;
    private  HashMap<Integer, Boolean> booleanHashMap;

    public MyAdapter() {
        list = new ArrayList<>();
        booleanHashMap = new HashMap<>();
        for (int i = 0; i < 50; i++) {
            list.add("条目" + i);
            booleanHashMap.put(i, false);
        }
    }

    //点击接口
    public interface OnItemClickListener{
        void cliclLister(View view,int position);
    }

    private OnItemClickListener mOnleister;

    public void setmOnleister(OnItemClickListener mOnleister) {
        this.mOnleister = mOnleister;
    }

    //长按接口

    public interface OnItemLongClickListener{
        void OnItemLong(View view,int position);
    }

    private OnItemLongClickListener onItemLongClickListener;

    public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
        this.onItemLongClickListener = onItemLongClickListener;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = View.inflate(parent.getContext(), R.layout.recyclerview_layout, null);
        return new MyViewHolder(inflate);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {

        holder.tv.setText(list.get(position));
        holder.checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                booleanHashMap.put(position, !booleanHashMap.get(position));
                notifyDataSetChanged();
            }
        });

        holder.checkBox.setChecked(booleanHashMap.get(position));

        holder.checkBox.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                Set<Map.Entry<Integer, Boolean>> entries = booleanHashMap.entrySet();
                for (Map.Entry<Integer, Boolean> b : entries) {
                    b.setValue(false);
                }

                booleanHashMap.put(position,true);

                notifyDataSetChanged();
                return true;
            }
        });

       holder.itemView.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               mOnleister.cliclLister(v,position);
           }
       });

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                onItemLongClickListener.OnItemLong(v,position);
                return true;
            }
        });

    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    //反选
    public void fanXuan() {
        Set<Map.Entry<Integer, Boolean>> entries = booleanHashMap.entrySet();
        for (Map.Entry<Integer, Boolean> b : entries) {
            b.setValue(!b.getValue());
        }

        notifyDataSetChanged();
    }



    public class MyViewHolder extends RecyclerView.ViewHolder {

        CheckBox checkBox;
        TextView tv;

        View itemView;
        public MyViewHolder(View itemView) {
            super(itemView);
            checkBox = (CheckBox) itemView.findViewById(R.id.check);
            tv = (TextView) itemView.findViewById(R.id.tv);
            this.itemView=itemView;
        }
    }

    //全选
    public void checkAll() {
        boolean shouldCheck = false;
        Set<Map.Entry<Integer, Boolean>> entries = booleanHashMap.entrySet();
        for (Map.Entry<Integer, Boolean> b : entries) {
            Boolean value = b.getValue();
            if (!value) {
                shouldCheck = true;

                break;
            }
        }

        for (Map.Entry<Integer, Boolean> b : entries) {
            b.setValue(shouldCheck);
        }
        notifyDataSetChanged();
    }

}

MainActivity类

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);
        myAdapter = new MyAdapter();


        recyclerView.setAdapter(myAdapter);

       myAdapter.setmOnleister(new MyAdapter.OnItemClickListener() {
           @Override
           public void cliclLister(View view, int position) {
               Toast.makeText(MainActivity.this, "点击:" + position, Toast.LENGTH_SHORT).show();
           }
       });


        myAdapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
            @Override
            public void OnItemLong(View view, int position) {

                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setMessage("长按啦"+position);
                builder.create().show();
            }
        });
    }

    //全选或全不选
    public void checkAllorNo(View view) {
        myAdapter.checkAll();
    }


    //反选
    public void fanXuan(View view) {
        myAdapter.fanXuan();
    }


}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值