RecyclerView
には、それぞれがCheckBox
の10個のビューを保持しています。さて、私の主な活動では、 "POST"という名前のメニューボタンが押されたとき、私はRecyclerView
の各ビュー内のすべてのCheckBox
がチェックされているかどうかを知りたいと思います。リサイクラービュー内のすべてのアイテムのラジオボタンのチェック状態を取得する
どうすれば実装できますか?
RecyclerView
には、それぞれがCheckBox
の10個のビューを保持しています。さて、私の主な活動では、 "POST"という名前のメニューボタンが押されたとき、私はRecyclerView
の各ビュー内のすべてのCheckBox
がチェックされているかどうかを知りたいと思います。リサイクラービュー内のすべてのアイテムのラジオボタンのチェック状態を取得する
どうすれば実装できますか?
RecyclerViewに渡されたモデルのリストのすべてのモデルに、さらに変数isChecked
を渡すことをお勧めします。そのような :次に
public class Model {
private boolean isChecked;
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
}
あなたRecyclerView ViewHolder内部に、コンストラクタを作成します。
public ListViewHolder(View view) {
super(view);
switchCompat = (SwitchCompat) view.findViewById(R.id.add_switch);
switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
getItemAt(getLayoutPosition()).setChecked(isChecked);
}
});
}
を次に、すべてのボタンの状態がちょうどあなたの活動のモデルのリストを反復取得するには:
public boolean areAllChecked() {
for (int i = 0; i < adapter.getItemCount(); i++) {
Model model = adapter.getItemAt(i);
if (!model .isChecked()) {
return false;
}
}
return true;
}
isChecked
を追加します(01に追加するアイテムアダプタ)onBindViewHolder
onCheckedChangeListener
をチェックボックスに実装し、isChecked
を適切に設定します。isChecked(int position)
メソッドを実装します。あなたのフラグメント/アクティビティの反復処理で、アダプタ項目を通してposition
アダプタの各チェックボックスの状態を追跡します。 これには、各チェックボックスの一意のキーにバインドされたブール値を格納するマップがあります。また、 OnCheckedChangeListenerを実装します。これにより
MyAdapter extends RecyclerView.Adapter implements OnCheckedChangeListener {
private Map<Object, Boolean> checkboxStates = new HasMap<>();
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkboxStates.put(buttonView.getTag(), isChecked);
}
public Map<Object, Boolean> getCheckboxStates() {
//We don't want the caller to modify adapter state.
return Collections.unmodifiableMap(this.checkboxStates);
}
//other code
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//your code
CheckBox cb;
//assuming that we have the reference to the cb view
//also assuming that cb has a unique identifiable tag assigned from the model
cb.setOnCheckedChangeListener(this);
if (this.checkboxStates.containsKey(cb.getTag()) {
cb.setChecked(this.checkboxStates.get(cb.getTag());
} else {
this.checkboxStates.put(cb.getTag(), cb.isChecked());
}
}
}
あなたは見えていた各チェックボックスの状態を取得するために getCheckboxStatesを呼び出すことができます。
ここで重要なポイントは、データセット内の各アイテムに固有のものが必要であり、そのアイテムを表す各チェックボックスのタグとして使用できることです。