当前位置: 移动技术网 > 移动技术>移动开发>Android > android RecyclerView checkbox复用解决

android RecyclerView checkbox复用解决

2020年07月28日  | 移动技术网移动技术  | 我要评论

先看复用后的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);
        }
    }
}

效果图为:

 当选择第一屏幕的第一个的时候,由于一屏幕最大显示的只有这么多,所以当第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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网