私は2つのビュータイプを含むRecycleViewを実装しています。 1つのビュータイプにはTextViewが含まれ、その他にはRadioButtonが含まれます。 私は、ラジオボタンのチェック/チェックを外すための配列リストを維持しています。しかし、時々RadioButtonはスクロール時にArray Listを使ってチェックステータスを設定してもチェックを外すことがあります。ここリサイクルビューのAndroidラジオボタンはスクロールのチェックを外します
は私のアダプタクラスがonBindViewに以下
public class AddItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<Object> items=null;
private final int MENU_OPTION = 0;
private final int MENU_CHOICE = 1;
private Context context;
private int prevSelectedItem=-1;
private RadioButton prevSelectedRdBtn=null;
public AddItemsAdapter(Context context, ArrayList<Object> items) {
this.items = items;
this.context = context;
}
@Override
public int getItemCount() {
return this.items.size();
}
@Override
public int getItemViewType(int position) {
if (items.get(position) instanceof MenuOption) {
return MENU_OPTION;
} else if (items.get(position) instanceof MenuChoice) {
return MENU_CHOICE;
}
else {
return -1;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerView.ViewHolder viewHolder = null;
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
switch (viewType) {
case MENU_OPTION:
View v1 = inflater.inflate(R.layout.menu_option, viewGroup, false);
viewHolder = new VMMenuOptionHolder(v1);
break;
case MENU_CHOICE:
View v2 = inflater.inflate(R.layout.menu_choice, viewGroup, false);
viewHolder = new VMMenuChoiceHolder(v2);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int i) {
try {
switch (viewHolder.getItemViewType()) {
case MENU_OPTION:
VMMenuOptionHolder vh1 = (VMMenuOptionHolder) viewHolder;
MenuOption dt= (MenuOption) items.get(i);
vh1.title.setText(dt.getOptionTitle());
vh1.choiceNote.setText(" - Select "+dt.getMaxChoiceAllowed()+" Choices");
break;
case MENU_CHOICE:
final VMMenuChoiceHolder vh2 = (VMMenuChoiceHolder) viewHolder;
MenuChoice mc= (MenuChoice) items.get(i);
vh2.radioButton.setChecked(mc.isSelect());
vh2.radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (prevSelectedItem!=i && prevSelectedRdBtn!=vh2.radioButton) {
selectChoice(i,vh2);
}
}
});
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void selectChoice(int pos, VMMenuChoiceHolder vh2) {
MenuChoice mc=(MenuChoice) items.get(pos);
mc.setSelect(true);
vh2.choiceNote.setText(" - Select "+mc.getMaxChoiceAllowed()+" Choices");
if(!mc.getSubMenuChoicesList().isEmpty()){
items.addAll(pos+1,mc.getSubMenuChoicesList());
}
if (prevSelectedItem != -1 && prevSelectedRdBtn!= null) {
((MenuChoice) items.get(prevSelectedItem)).setSelect(false);
prevSelectedRdBtn.setChecked(false);
}
notifyDataSetChanged();
prevSelectedItem=pos;
prevSelectedRdBtn=vh2.radioButton;
}
private class VMMenuChoiceHolder extends RecyclerView.ViewHolder{
TextView choiceNote;
RadioButton radioButton;
CheckBox checkBox;
VMMenuChoiceHolder(final View v2) {
super(v2);
radioButton=v2.findViewById(R.id.radioButton);
checkBox=v2.findViewById(R.id.checkBox);
choiceNote=v2.findViewById(R.id.choice_note);
}
}
}
あなたのコードを質問 –
と共有すると、ラジオボタンの値を保存し、スクロール中にそれらを復元する必要があります。つまり、参照を維持する必要があります –
ラジオボタンの状態をどのように保存しますか? – Piyush