리사이클러보기와 어댑터 클래스가 있습니다. 보기의 한 목록 셀 안에는 확인란이 있습니다. 검사에 따르면 내보기의 버튼 하나가 활성화/비활성화되어 있습니다. 하지만 제가 발견 한 것은 상자에 하나의 체크를 할 때입니다. 버튼 활성화는 두 번 호출됩니다. 그리고 일부 체크 박스에 대해 단일 선택을 사용합니다 (어댑터 클래스에서 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