2016-10-22 8 views
0

クリックしたときにrecyclerViewで選択したアイテムを強調表示しようとしていますが、代わりに2つのアイテムがトリガされます。私を助けてください。 arraylistとしてクリックしたアイテムを保存し、クリックしたアイテムをクリアする必要がありますか?RecyclerViewアダプタnotifyItemChangedトリガを2回

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

なぜあなたは色を変更していて、setOnClickListenerメソッドでalredyである場合にnotifyItemChangedを呼び出す必要がありますか? – zon7

+0

@ zon7とにかく2つのアイテムの色が変わります:( –

+0

2つのアイテムがスクロールしないと、ビューを再利用しています。 – zon7

答えて

0

これは、あなたがスクロールする同じビューを再利用するリサイクルする予定です。それを修正するには、次の手順を実行する必要があります。

  1. クリックすると選択したアイテムが保存されます。変数や配列内の複数の項目
  2. をしたい場合は、

それを色やしないようにしている場合、それは完璧に動作しますその方法を知っているbindメソッドで選択した項目の変数/配列をチェック

関連する問題