2017-07-09 19 views
2

私は、視界がなくなった私のrecyclerviewアイテムにCheckBoxを持っています。recyclerviewのすべての項目のビューの表示を変更します

holder.faviorateVideoItemRelative.setOnLongClickListener(new View.OnLongClickListener() { 
     public boolean onLongClick(View arg0) { 
      holder.chk_faviorateVideo.setVisibility(View.VISIBLE); 
      // holder.chk_faviorateVideo.setChecked(!holder.chk_faviorateVideo.isChecked()); 
      return true ; 
     } 
    }); 

が、これは単に現在の項目のチェックボックスが表示されるようになります。私はこれをしなかったの.soのいずれかの項目にlongClickを持っている場合recyclerviewのすべての項目について、それを見えるようにしたいです。 私のコードを私のViewHolderクラスに移しましたが、何も変わりませんでした。ループやリサイクルビューの再描画なしでどうすればいいですか? 私はアンドロイドのデフォルトのファイルマネージャーを長押しして選択するようなことをする必要があります。ありがとうございます。

答えて

3

あなたのHolderには現在のアイテムのみが含まれているため、このアイテムにのみ結果が表示されます。

最初のオプションは、ブール値フラグを作成してnotifyDataSetChanged()と呼ぶだけです。onBindViewHolder()では、そのフラグを使用して可視性を設定します。

また、CheckBoxesまたはHoldersのコレクションを作成し、それらを繰り返しクリックしてチェックボックスを表示させることができます。私にとっては、最悪の選択肢ではありません。

私が見る別の方法では、ループを望んでいない場合は、Observerパターンオンのチェックボックスの作成を実装して、可視性通知を受け取るサブスクライバとして追加する必要があります。あなたはそのイベントであなたのチェックボックスをサブスクライブする前にして - あなたがイベント
を発するクリック長い上 -

もここでRXを使用するには良い可能性があります。
また、Observerパターンに関連しています。

+0

フラグとnotifyDataSetChanged()が私の問題を解決しました。ありがとう! – sunlover3

0

が長押しだったかではないし、あなたのonBindViewHolderにあなたは、これが真か偽であるかどうかを確認し、それに応じて可視性を設定した場合は、情報を格納するアダプタのbooleanを作成することができます。自分の中で次にholder.chk_faviorateVideo.setVisibility(longPressed ? View.VISIBLE : View.GONE); あなたはこの変数を切り替えて呼び出します。notifyDataSetChanged()

関連する問題