2016-06-30 2 views
0

RecyclerViewには、それぞれがCheckBoxの10個のビューを保持しています。さて、私の主な活動では、 "POST"という名前のメニューボタンが押されたとき、私はRecyclerViewの各ビュー内のすべてのCheckBoxがチェックされているかどうかを知りたいと思います。リサイクラービュー内のすべてのアイテムのラジオボタンのチェック状態を取得する

どうすれば実装できますか?

答えて

1

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; 
} 
0
  1. モデルクラスにブール値isCheckedを追加します(01に追加するアイテムアダプタ)
  2. アダプタでonBindViewHolderonCheckedChangeListenerをチェックボックスに実装し、isCheckedを適切に設定します。
  3. アダプターにisChecked(int position)メソッドを実装します。あなたのフラグメント/アクティビティの反復処理で、アダプタ項目を通してposition
  4. で指定された項目のチェック値を返し、すべての項目がチェックされているかどうかを調べる必要があります。
0

アダプタの各チェックボックスの状態を追跡します。 これには、各チェックボックスの一意のキーにバインドされたブール値を格納するマップがあります。また、 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を呼び出すことができます。

ここで重要なポイントは、データセット内の各アイテムに固有のものが必要であり、そのアイテムを表す各チェックボックスのタグとして使用できることです。

関連する問題