使用notifyDatasetChange时,在Recyclerview中随机选中复选框

时间:2016-11-17 06:19:54

标签: android android-recyclerview android-checkbox

使用notifyDatasetChange时,在Recyclerview中随机选中复选框。这是我的代码。

public void onBindViewHolder(final ViewHolder holder, int position) {    
    SplitObject object=splitObjects.get(position);
    holder.textView_memberName.setText(object.getMember_name());
    holder.textView_splitAmount.setText(amount/splitObjects.size()+"");
    if(holder.checkBox.isChecked())
    {
        Debug.e("checked"+position);
    }
    else
    {    
        Debug.e("Unchecked"+position);
    }
    holder.checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            notifyDataSetChanged();
        }
    });    
 }

我无法弄清楚为什么notifyDataSetChanged功能无法正常工作。

3 个答案:

答案 0 :(得分:3)

使用checkChangeListener而不是onClickListener

    holder. checkBox.setOnCheckedChangeListener(null);

    //if true, your checkbox will be selected, else unselected
    holder.checkBox.setChecked(pass the boolean from your list);

    holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                //set your object's last status
                yourarrayobject.setSelected(isChecked);
        }
    });

答案 1 :(得分:1)

我认为在滚动回调视图时选中了复选框,你可以取悦 Viewholder 概念,所以将viewHolder.CheckBox.setChecked(isItemChecked);添加到onBindViewHolder它会起作用。您将不得不用您检索该位置项目的实际状态的逻辑替换isItemChecked ...

答案 2 :(得分:0)

您的notifyDataSetChanged()需要在UI线程上运行。在适配器未正确更新的情况下,我遇到了类似的困难。尝试在OnClickListener中执行此操作:

@Override
public void onClick(View v) {
    getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                notifyDataSetChanged();
            }
        });
}