我有一个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