2016-10-22 118 views
0

我试图在clicked时突出显示我在recyclerView中选择的项目,但它会触发两个项目。请帮帮我。我是否应该将点击的项目存储为数组列表,并在新点击时清除它们?RecyclerView适配器notifyItemChanged触发两次

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(); 
} 

}

+0

为什么你需要调用notifyItemChanged如果你只是改变颜色,并且你正在执行setOnClickListener方法呢? – zon7

+0

@ zon7无论如何,它会改变2项颜色:( –

+0

两个项目,当你滚动不是吗?这是因为它重新使用视图,你必须重置视图参数,如颜色,当你改变它们dinamically.I将添加一个响应 – zon7

回答

0

这是由于回收再利用了同样的观点,当你滚动。为了解决这个问题,你必须做下一个:

  1. 当你点击它时,存储选定的项目。在一个变量或数组,如果你想要一个以上的项目
  2. 入住bind方法选择的项目变量/数组知道,如果你有颜色或不

这样,它会工作得很好