我有一個RecyclerView,每個元素代表一個事件。我想讓用戶通過點擊來選擇事件。一旦選定,事件和報告按鈕將被着色:RecyclerView中的選定項目在滾動上發生變化
執行點擊之前的UI:click here。
用戶界面執行點擊後:click here。
這很簡單,據稱工作;我爲每個ViewHolder
設置了一個OnClickListener
,它負責爲物品着色,當它被觸發時,它將觸發名爲onOccurrenceSelected
的擁有活動中的另一個事件,該活動負責更改按鈕的狀態。
但是,當滾動瀏覽RecyclerView的項目時,其他不相關的項目會被觸發(儘管不是這樣),並且當向後滾動選定的事件時顏色爲未選中狀態。當發生這種情況時,唯一應該着色項目的事件不會被觸發。
這種行爲的任何解釋?謝謝!
編輯:這裏是從適配器的一些相關代碼:
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補充說。 –
在您的適配器類中覆蓋此方法 - @Override public int getItemViewType(int position){ return position; } – musica