W jaki sposób można uzyskać spójny wybór pozycji za pomocą RecyclerView
? Rozumiem, że RecyclerView
przetwarza stare widoki, a co nie. Mój problem polega na tym, że mam listę przedmiotów z ikoną na każdym przedmiocie, po kliknięciu elementu ikona zmienia kolor. Udało mi się to wszystko osiągnąć, ale po przewinięciu listy zauważyłem, że inne przedmioty również mają zmienione ikony, a kiedy przewijam do pozycji, którą kliknąłem, ikona nie jest już "kliknięta" kolor".Jak śledzić wybrane pozycje w RecyclerView w systemie Android?
Czy ktoś wie, jak śledzić wybrane elementy? Wciąż widzę coś o nazwie SparseBooleanArray
, ale nie jestem pewien, jak to zaimplementować.
Oto mój kod adapter:
public class TableRVAdapter extends RecyclerView.Adapter<TableRVAdapter.TableHolder> {
List<Tables> tableList;
private SparseBooleanArray selectedItems;
public TableRVAdapter(List<Tables> tableList)
{
this.tableList = tableList;
selectedItems = new SparseBooleanArray();
// setHasStableIds(true);
}
class TableHolder extends RecyclerView.ViewHolder
{
TextView tableTV;
CardView tableCV;
View circle;
View parentView;
TableHolder(final View itemView)
{
super(itemView);
tableTV = (TextView)itemView.findViewById(R.id.tableTV);
tableCV = (CardView)itemView.findViewById(R.id.tableCV);
circle = itemView.findViewById(R.id.statusCircle);
itemView.setClickable(true);
parentView = itemView;
tableCV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
circle.setBackgroundResource(R.drawable.circle);
}
});
}
/*
@Override
public void onClick(View view) {
if (selectedItems.get(getAdapterPosition(), false)) {
tableCV.setSelected(false);
circle.setBackgroundResource(R.drawable.circle2);
}
else {
selectedItems.put(getAdapterPosition(), true);
tableCV.setSelected(true);
circle.setBackgroundResource(R.drawable.circle);
}
}*/
}
@Override
public TableHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.table_item,parent,false);
TableHolder tableHolder = new TableHolder(view);
return tableHolder;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView)
{
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public void onBindViewHolder(TableHolder holder, int position) {
holder.tableTV.setText(tableList.get(position).getTableNumber());
}
/**
* Returns the total number of items in the data set hold by the adapter.
*
* @return The total number of items in this adapter.
*/
@Override
public int getItemCount() {
return tableList.size();
}
}
Zobacz mój zredagowany wpis – spongyboss