【发布时间】:2016-09-27 12:12:56
【问题描述】:
我有一个 RecyclerView,每个元素都代表一个事件。我想让用户通过单击来选择事件。选择后,事件和报告按钮将被着色:
执行点击前的 UI:click here。
用户界面点击后:click here。
这很简单,据称有效;我为每个 ViewHolder 设置了一个 OnClickListener,它负责为项目着色,并在触发时触发名为 onOccurrenceSelected 的拥有活动中的另一个事件,该事件负责更改按钮的状态。
但是,当滚动 RecyclerView 的项目时,其他不相关的项目会被着色,就像它们的 OnClickListener 被触发(虽然它不是)一样,并且当回滚选定的事件时,被着色为未选择。发生这种情况时,不会触发唯一应该为项目着色的事件。
对这种行为有什么解释吗?谢谢!
编辑:以下是适配器的一些相关代码:
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; }
标签: java android android-recyclerview