2017-12-18 23 views
0

場合、私はRecyclerViewに問題がある、私は正確に何を望むか、各行の項目でradio buttonといくつかの他のビューを持っているRecyclerView他のアイテムからrecyclerviewアイテムのデータを更新するにはどうすればいいですか?

を持って、RadioButtonがユーザによってチェックされたときに、私は(RadioButton他のチェックを外したいです何かが以前にチェックされています)。 Recyclerviewなので、私はradiogroupを使うことができません。アダプタonBindViewHolder

私はどのように私は、前のラジオボタンを選択しチェックを外しをすることができます

holder.radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      selectedPosition = holder.getAdapterPosition(); 
      Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

各ラジオボタンのためにこのリスナーを書くのか?
つまり、別のアイテムビューのリスナーからrecyclerviewの特定のアイテムのビュープロパティを更新するにはどうすればよいですか?

+1

はこの1 ..httpsを参照してください。//stackoverflow.com/questions/46344032/how-to-select-just-oneを-radiobutton-with-recyclerview-android/46344598#46344598 –

+0

@Sanjay Majoka ohこれは私が欲しいものです。試してみました。この素晴らしい助けをしてくれてありがとうございます。 – Mosa

答えて

2

あなたのアダプタでグローバルのSelectedItemへの参照を持っているし、ユーザーが新しいラジオボタンをチェックしたときにすべての項目を更新する必要があります。

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { 
    private int selectedItemPosition = -1; 
} 

とアダプタのごonBindViewHolder()方法で物事を行う、

@Override 
public void onBindViewHolder(final Adapter.ViewHolder holder, int position) { 
    holder.radioButton.setChecked(holder.getAdapterPosition()==selectedItemPosition); 
    holder.radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      selectedItemPosition = holder.getAdapterPosition(); 
      notifyDataSetChanged(); 
     } 
    }); 
} 
+0

ok greateとうまくいきますが、すべてのアイテムとrを更新するとecyclerviewにはデータの大量のマウントが数秒間遅れるでしょうか? – Mosa

+0

recyclerviewはリスト内のすべての項目を一度に更新しません。名前が示しているように、Recyclerviewはあなたのリストに多くのアイテムを描画したり描画したりすることはありません。単にビューを再利用します。各項目は、表示画面に入ると更新されます。だからラグについて心配する必要はありません。 – kcg

+0

ああ、説明してくれてありがとう、ありがとう – Mosa

1

はこれを試してみてください::

 if (position == selectedPosition) { 
      holder.radioButton.setChecked(true); 
      Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show(); 
     } else { 
      holder.radioButton.setChecked(false); 
     } 

     holder.radioButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       selectedPosition = holder.getAdapterPosition(); 
       notifyDataSetChanged(); 
      } 
     }); 
+0

@Sanjay Majokaさんは私にそれをくれましたが、これは別の良い答えであり、ありがとうございました – Mosa

関連する問題