使用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
功能无法正常工作。
答案 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();
}
});
}