我有一个回收站视图和一个适配器类。在视图的一个列表单元格内有一个复选框。根据检查我的视图中的一个按钮被启用/禁用。但我发现的是在盒子里进行一次检查。按钮启用被调用两次。我对一些复选框使用了一些选择(在我的适配器类中使用一个名为enforcedexclusivity()的方法检查条件)。因此,对于该复选框,取消选中正常工作,但检查被调用3次。我把我的代码放在下面。请告诉我解决方案。
public class FurtherExtrasAdapter extends RecyclerView.Adapter<FurtherExtrasAdapter.ViewHolder> {
ArrayList<Item> items;
Context context;
int flag = 0;
private CouponCodeActivity mThis;
public FurtherExtrasAdapter(ArrayList<Item> items, CouponCodeActivity mThis, Context context) {
this.items = items;
this.mThis = mThis;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell_platform_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
;
holder.enrolment.setText(items.get(position).getName());
holder.selectEnrollment.setChecked(items.get(position).isPreselect());
holder.selectEnrollment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (items.get(position).isPreselect()) {
items.get(position).setPreselect(false);
} else {
EnforcedExclusivity(position);
}
}
});
}
@Override
public int getItemCount() {
return items.size();
}
public void EnforcedExclusivity(int index) {
if (items.get(index).isExclusive()) {
items.get(index).setPreselect(true);
for (int i = 0; i < items.size(); i++) {
if (i == index) {
continue;
}
items.get(i).setPreselect(false);
}
} else {
for (int i = 0; i < items.size(); i++) {
if (items.get(i).isExclusive()) {
items.get(i).setPreselect(false);
}
items.get(index).setPreselect(true);
}
}
notifyDataSetChanged();
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView enrolment;
CheckBox selectEnrollment;
public ViewHolder(View itemView) {
super(itemView);
enrolment = (TextView) itemView.findViewById(R.id.tv_entrollment);
selectEnrollment = (CheckBox) itemView.findViewById(R.id.cb_select_entrollment);
selectEnrollment.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mThis.updateButtonState(1);
} else {
mThis.updateButtonState(-1);
}
}
});
}
}}
我的视图类包含以下代码。
rv_further=(RecyclerView)findViewById(R.id.rv_further);
rv_further.setLayoutManager(manager);
rv_further.setVisibility(View.VISIBLE);
rv_further.setHasFixedSize(true);
rv_further.setItemAnimator(new DefaultItemAnimator());
rv_further.setAdapter(adapter);
public void updateButtonState(double num) {
checkedBoxs += num;
if (checkedBoxs > 0) {
Log.d("---CHECKED",String.valueOf(checkedBoxs));
btnApply.setEnabled(true);
} else {
Log.d("---UNCHECKED",String.valueOf(checkedBoxs));
btnApply.setEnabled(false);
}
}
答案 0 :(得分:0)
首先尝试将所有侦听器移动到onBind(...)方法。在onBind(...)的第一行,将所有侦听器设置为null,在午餐setSelected(...)之后使用正确的数据,然后将侦听器设置为所需的侦听器。