欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android RecyclerView checkbox复用解决

程序员文章站 2022-04-07 21:37:36
先看复用后的Adpter代码,这时候checkbox是一直在复用的;package com.example.demo;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CheckBox;import androidx.annotation.NonNull...

先看复用后的Adpter代码,这时候checkbox是一直在复用的;

package com.example.demo;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

import javax.security.auth.callback.Callback;

public class MyAdpter extends RecyclerView.Adapter<MyAdpter.ViewHolder> {

    private List list;
    private Context context;

    public MyAdpter(List list, Context context) {
        this.list = list;
        this.context = context;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.item_demo, parent, false);
        ViewHolder viewHolder=new ViewHolder(inflate);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.checkBox.setText(list.get(position)+"");

    }

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

    class ViewHolder extends RecyclerView.ViewHolder{
        CheckBox checkBox;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            checkBox=itemView.findViewById(R.id.cb_man);
        }
    }
}

效果图为:

android RecyclerView checkbox复用解决android RecyclerView checkbox复用解决

 当选择第一屏幕的第一个的时候,由于一屏幕最大显示的只有这么多,所以当第9个的时候是第二屏幕,第9复用了第1个的控件,解决办法为:

 @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.checkBox.setText(list.get(position)+"");
        holder.setIsRecyclable(false);//强制关闭复用
    }

这时候就不会复用第一屏幕的了,不过数据量大的时候内存有点大,数据量大的时候配合使用分页,计算每屏的最大个数; 

 

本文地址:https://blog.csdn.net/s452195377/article/details/107596588

相关标签: android