这个问题与以下内容完全相同:
我有一个RecyclerView网格适配器包含复选框和父活动中的显示按钮 . 如果我们选择复选框父活动显示按钮启用,如果我们取消选中复选框显示按钮将禁用,这是我的要求,它的工作正常,但当我滚动回收查看我的显示按钮以禁用 . 当我滚动时,我得到 item.isChecked()
是假的..任何人都可以帮我实现我的要求,请解释一下
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
try {
final GridViewHolder viewHolder = (GridViewHolder) holder;
final MyList item = items.get(position);
viewHolder.myCheckBox.setTag(position);
viewHolder.myCheckBox.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton,
boolean b) {
item.setChecked(b);
if (item.isChecked())
Count++;
else
Count--;
if (Count > 0) {
((MyActivity)context).showButton().setEnabled(true);
} else {
((MyActivity)context).showButton().setEnabled(false);
}
}
});
viewHolder.myCheckBox.setChecked(item.isChecked());
} catch (Exception e) {
e.printStackTrace();
}
}
在我的pojo列表类中,我为identy复选框返回值编写了两个函数
boolean isChecked;
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean isChecked) {
this.isChecked = isChecked;
}
适配器中的ViewHolder内部类
public class GridViewHolder extends RecyclerView.ViewHolder {
private CheckBox myCheckBox;
public GridViewHolder(final View parent) {
super(parent);
myCheckBox = (CheckBox) parent.findViewById(myCheckBox);
((ProductListingActivity)context).showButton().setEnabled(false);
parent.setOnClickListener(GridAdapterMy.this);
}
}
5 回答
我遇到了和你一样的问题,这就是我修复它的方法 .
尝试使用此代码
在 POJO class 中创建一个额外的变量:
然后,在适配器中添加这样的代码:
EDIT
像下面一样创建一个新的
Interface
现在在你的活动中实现这样
将此活动上下文作为参数传递给您的适配器
而不是在您的活动中添加此代码
滚动
onBindViewHolder
重复调用时,这就是为什么复选框的状态会自动更改 . 所以你必须在滚动时保存复选框的状态 . 看看 .}}
快乐的编码!!
谢谢所有帮助我的人,我发现了我的错误,每当我滚动,我的setOnCheckedChangeListener正在调用,这就是为什么我的按钮禁用,我只添加了一行“viewHolder.myCheckBox.setOnCheckedChangeListener(null);”它完美地工作......谢谢你的建议和帮助