私は各要素がイベントを表すRecyclerViewを持っています。私は、ユーザーがイベントをクリックして選択させたいと思っています。選択すると、イベントとレポートボタンの色が表示されます:RecyclerViewの選択項目がスクロール時に変更される
クリックする前のUI:click here。
UIクリック後:click here。
これはかなりシンプルであり、うまく機能しています。アイテムの色分けを担当するViewHolder
ごとにOnClickListener
を設定し、発生すると、ボタンの状態を変更する責任を負うアクティビティ(onOccurrenceSelected
)で別のイベントがトリガーされます。 RecyclerViewのアイテムをスクロールするとき(それはなかったが)、そのOnClickListener
が起動し、そしてバックスクロールするとき、選択されたイベントを選択しないように着色されているよう
しかし、他の無関係な項目が着色されています。これが起こっている間、アイテムの色を付ける唯一のイベントはトリガーされません。
このような現象についての説明はありますか?ありがとう!
EDIT:ここでは、アダプタからのいくつかの関連するコードされていますので、スクロールしながら、あなたが一時的なのArrayListに選択された位置を格納する
private List<Occurrence> mDataSet;
private Activity activity;
public <OccurrencesActivity extends OnOccurrenceSelectedListener> OccurrencesAdapter(OccurrencesActivity occurrencesActivity, List<Occurrence> occurrences) {
this.activity = (android.app.Activity) occurrencesActivity;
mDataSet = occurrences;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
Occurrence instance = mDataSet.get(position);
...
setOnClickListener(holder, instance);
}
private void setOnClickListener(final ViewHolder holder, final Occurrence occurrence) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!occurrence.isSelected()) {
holder.itemView.setBackgroundColor(App.getContext().getResources().getColor(R.color.turquoise));
holder.titleTextView.setTextColor(App.getContext().getResources().getColor(R.color.white));
holder.statusTextView.setTextColor(App.getContext().getResources().getColor(R.color.white));
holder.dateTextView.setTextColor(App.getContext().getResources().getColor(R.color.white));
holder.timeTextView.setTextColor(App.getContext().getResources().getColor(R.color.white));
} else {
holder.itemView.setBackgroundColor(App.getContext().getResources().getColor(R.color.white));
holder.titleTextView.setTextColor(App.getContext().getResources().getColor(R.color.turquoise));
holder.statusTextView.setTextColor(App.getContext().getResources().getColor(R.color.grey));
holder.dateTextView.setTextColor(App.getContext().getResources().getColor(R.color.grey));
holder.timeTextView.setTextColor(App.getContext().getResources().getColor(R.color.grey));
}
occurrence.setSelected(!occurrence.isSelected());
((OnOccurrenceSelectedListener)activity).onOccurrenceSelected(mDataSet);
}
});
}
アダプタコード –
@SarthakMittalが追加されました。 –
アダプタクラスのこのメソッドをオーバーライドします。 - オーバーライド public int getItemViewType(int position){ return position; } – musica