有谁知道,如何用复选框处理RecyclerView
滚动问题?
我在Recyclerview
中使用多个复选框为视图充气,在我滚动Recyclerview
后选中复选框后,取消选中已选中的复选框。
如何防止在Android中的Recyclerview
中取消选中复选框。
答案 0 :(得分:1)
这是一个常见的问题,使用setTag()和getTag()来克服这种情况。下面的代码会给你一个想法:
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
final int pos = position;
viewHolder.chkSelected.setChecked(yourList.get(position).isSelected());
viewHolder.chkSelected.setTag(yourList.get(position));
viewHolder.chkSelected.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
YourList list = (YoutList) cb.getTag();
list.setSelected(cb.isChecked());
yourList.get(pos).setSelected(cb.isChecked());
Toast.makeText(
v.getContext(),
"Clicked on Checkbox: " + cb.getText() + " is "
+ cb.isChecked(), Toast.LENGTH_LONG).show();
}
});
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public CheckBox chkSelected;
public YourList yourList;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
);
chkSelected = (CheckBox) itemLayoutView
.findViewById(R.id.chkSelected);
}
}
答案 1 :(得分:0)
您已在List<Object>
每个位置维护此项,然后在该位置的 onBindViewHolder 方法中对其进行选中或取消选中
答案 2 :(得分:0)
最简单的方法是使用Model类For Example
class ModelDemo{
private boolean isChecked;
}
在onBindViewHolder方法
中 if(objects(position).isChecked()){
chkbox.setSelected(true);
}else{
chkbox.setSelected(false);
}
答案 3 :(得分:0)
在持有者(或适配器)中保存已检查状态,并在onBindViewHolder中获取该信息
public void onBindViewHolder(ViewHolder holder){
....
holder.checkbox.setChecked(checked);
}
class ViewHolder extends RecyclerView.ViewHolder {
CheckBox checkbox;
boolean checked = false;
...
ViewHolder(View v){
super(v);
...
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
if ( isChecked ){
checked = isChecked;
}
}
});
}
}
答案 4 :(得分:-1)