Android之RecyclerView嵌入CheckBox显示问题解决(列表单选)

这里RecyclerView嵌入CheckBox时滑动列表,列表item中的会产生错位现象,解决这个问题需在Adapter中onBindViewHolder方法中处理。下面的例子是列表单选,所以只设定了一个整型变量来保存当前选中的CheckBox,若是多选,可用List保存列表所有CheckBox的选中状态。

    1. 设置CheckBox的标签为position+1,即CheckBox的标签从1开始,choosePosition的初始值为0,即最开始是无任何CheckBox选中。

    2. 监听CheckBox状态改变事件,当CheckBox从非选中变成选中的状态,就把这个CheckBox的标签值赋给choosePosition。

    3. 监听CheckBox点击事件,每次点击都刷新列表。

    4. 当刷新列表时,就会到onBindViewHolder方法,判断CheckBox的position+1是否等于choosePosition,是则设置为选中状态,否则设置为非选中状态。


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

    private Context context;
   
    private int choosePosition = 0;


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (context == null) {
            context = parent.getContext();
        }
        View view = LayoutInflater.from(context).inflate(R.layout.item_list,parent,false);
        return new MeetingRoomAdapter.ViewHolder(view);

    }

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

        
        final Integer tag = position+1;
        holder.checkBoxChoose.setTag(tag);

        //先触发checkBox状态改变事件
        holder.checkBoxChoose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                int tagCheckBox = (Integer) buttonView.getTag();
                if (isChecked) {
                    choosePosition = tagCheckBox;
                }

            }
        });
        //后触发checkBox点击事件
        holder.checkBoxChoose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                notifyDataSetChanged();
                
            }
        });
        if (position+1 == choosePosition) {
            holder.checkBoxChoose.setChecked(true);
        }else {
            holder.checkBoxChoose.setChecked(false);
        }
        holder.checkBoxChoose.setScaleX(1.3f);//改变CheckBox的尺寸
        holder.checkBoxChoose.setScaleY(1.3f);
        
    }

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

    static class ViewHolder extends RecyclerView.ViewHolder {

       
        CheckBox checkBoxChoose;

        private ViewHolder(View itemView) {
            super(itemView);

            checkBoxChoose = itemView.findViewById(R.id.checkBox);

        }

    }
}



猜你喜欢

转载自blog.csdn.net/amberoot/article/details/80545704