2016-10-22 116 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方法選擇的項目變量/數組知道,如果你有顏色或不

這樣,它會工作得很好