Android 复选框在一次单击中选中两次
我有一个回收器视图和一个适配器类。在视图的一个列表单元格中有一个复选框。根据检查,我的视图中的一个按钮处于启用/禁用状态。但我发现当在框中打一个勾选时。按钮启用被调用两次。我对一些复选框使用了一些单一选择(在适配器类中使用名为enforcedexclusivity()的方法选中了条件)。因此,对于该复选框,取消选中可以正常工作,但选中被调用3次。我把我的代码放在下面。请告诉我解决办法Android 复选框在一次单击中选中两次,android,Android,我有一个回收器视图和一个适配器类。在视图的一个列表单元格中有一个复选框。根据检查,我的视图中的一个按钮处于启用/禁用状态。但我发现当在框中打一个勾选时。按钮启用被调用两次。我对一些复选框使用了一些单一选择(在适配器类中使用名为enforcedexclusivity()的方法选中了条件)。因此,对于该复选框,取消选中可以正常工作,但选中被调用3次。我把我的代码放在下面。请告诉我解决办法 public class FurtherExtrasAdapter extends RecyclerView.A
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);
}
}
});
}
}}
首先,尝试将所有侦听器移动到onBind(…)方法。在onBind(…)的第一行上,将所有侦听器设置为null,然后使用正确的数据选择(…),然后将侦听器设置为所需的侦听器。您为selectEnrollment对象添加了两个事件。一个是click listener,另一个是setOnCheckedChangeListener(…)…其中有什么交易?为复选框生成两个事件需要什么。有一个setOnCheckedChangeListener()enough@Ahamed首先点击将检查排他性,它将相应地更新。并且setOnchecked将查找更改按钮状态
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);
}
}