我有一個回收站視圖和一個適配器類。在視圖內的一個列表單元格中有一個複選框。根據我的觀點中的一個按鈕啓用/禁用。但是我發現什麼時候在盒子裏進行一次檢查。啓用按鈕被稱爲兩次。我爲某些複選框使用了一些單選項(在我的適配器類中使用名爲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);
}
}
您爲selectEnrollment對象添加了兩個事件。一個是點擊偵聽器,另一個是setOnCheckedChangeListener(...).. – Noorul
它是什麼交易? –
需要爲複選框創建兩個事件。有足夠的setOnCheckedChangeListener() – Noorul