繁体   English   中英

RecyclerView Adapter notifyItemChanged触发两次

[英]RecyclerView Adapter notifyItemChanged triggers twice

我试图在单击时在recyclerView中突出显示我选择的项目,但它会触发两个项目。 请帮我。 我应该将单击的项目存储为arraylist并在单击新的项目时将其清除吗?

public class StationsAdapter extends RecyclerView.Adapter<StationsHolder> {

List<Station> stations;

public StationsAdapter(List<Station> stations){
    this.stations = stations;
}

public void changeItemAtPosition(int position) {
    notifyItemChanged(position);
}

@Override
public StationsHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new StationsHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.stations_item,parent,false));
}

@Override
public void onBindViewHolder(StationsHolder holder, int position) {
    bind(holder);
}

private void bind(final StationsHolder holder) {

    holder.tvTitle.setText(stations.get(holder.getAdapterPosition()).getName());
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder.tvTitle.setTextColor(ContextCompat.getColor(AppDelegate.getContext(),R.color.colorAccent));
        }
    });
}

@Override
public int getItemCount() {
    return stations.size();
}

}

这是由于在滚动时回收者会重复使用同一视图。 为了解决这个问题,您将必须执行以下操作:

  1. 单击所选项目时将其存储。 如果要多个,则在变量或数组中
  2. 在bind方法中检查选定的项目变量/数组,以了解是否需要着色

这样,它将完美地工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM