私はRecyclerViewを持っています。RecyclerViewはデータベースから派生した一連のビューを表示します。ユーザーがエッジを強調表示してビューの1つを選択したことを確認したいと思います。ユーザーが別のオプションを選択する場合は、元の選択範囲のハイライトを削除します。これは私が少し苦しんだところです。RecyclerViewから直接ViewHolderへのアクセス
最初のハイライトは、私が内部で行っていたように、問題はありませんでした。しかし、アダプタの位置だけで前のビューにアクセスする方法はわかりません。私はAndroid APIやgoogleから多くを見つけることができないので、StackOverflowを約1時間探しています。多くのユーザーが同様の質問をしているように見えますが、最終的に微妙な違いは役に立つ回答を無効にします。私RecyclerView
の内部public class
である私のViewHolder
、インサイド
次のように、私はOnClickListener
を持っている:
@Override
public void onClick(View view) {
if(!selected) {
selected = true;
view.setBackgroundResource(R.drawable.default_selection_background);
} else {
selected = false;
view.setBackgroundResource(0);
}
UpdateSelected(getAdapterPosition());
}
これは私のRecyclerView
に戻って指す、と率直に言って、私はすべての作業コードを追加するために、まだだが私のUpdateSelected(int position)
方法。
それが助け場合、私はそれがこのように機能持っているつもり:
void UpdateSelected(int position) {
if(position != currentlySelected) {
ViewHolder[currentlySelected].Deselect();
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
...
public void Deselect() {
// and from here, I can go on as normal.
}
}
彼らは、具体的に作業を続けたい場合を除き、私は、UIの目的のために位置を導出するgetLayoutPosition()
を使用して他の人に助言ユーザーに気づきました私がしようとしている内部データです。
RecyclerViewから特定のViewHolderにアクセスするにはどうすればよいですか?
ブリリアント!魅力のように働く。 'onBindViewHolder'には変更が加えられました。これはすぐに' view'にアクセスできます。私は単に 'viewHolder.itemView.setBackgroundResource(backgroundRes)'を使用しました。効率の点については、 'previousSelection'と' currentSelection'に 'notifyItemChanged'だけも載せていますが、どうもありがとうございます。 – Gnemlock
私も同じ問題に直面しています。だから私はその解決策を試みるが、私の場合はうまくいかなかった。 @Gnemlock –
私はちょうどこの答えを見つけました。いいですが、 'notifyDataSetChanged()'を 'notifyItemChanged(selectedPosition)'に変更することをお勧めします。 更新する必要があるビューをアダプタに正確に伝えることができるときは、 'notifyDataSetChanged()'を呼び出さないことをお勧めします。 –