Не следует напрямую изменять состояние просмотра элемента внутри адаптера следующим образом:
holder = recyclerView.findViewHolderForAdapterPosition(z).itemView;
holder.findViewById(R.id.image).setVisibility(View.VISIBLE);
holder.findViewById(R.id.image1).setVisibility(View.INVISIBLE);
Вместо этого вам нужно использовать определенный метод, чтобы сообщить адаптеру RecyclerView, что вам нужно изменить состояниепросмотр товара.
Следует отметить, что RecylerView естественным образом (программным способом) будет повторно обрабатывать свой предыдущий элемент всякий раз, когда ему нужно нарисовать другой элемент.Таким образом, вам нужно сохранять состояние каждого элемента, будь то использование определенной переменной внутри вашей модели или использование переменной для хранения каждого состояния элемента.
Если вы не хотите менять модель, вы можете использовать SparseBooleanArray для хранения состояния.Вы можете сделать что-то подобное в своем адаптере:
public class YourAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Multiples> mItems;
// We use this to hold the image state.
private SparseBooleanArray mImageStates;
public YourAdapter(List<Multiples> items) {
this.mItems = items;
mImageStates = new SparseBooleanArray();
...
}
@Override
public YourAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
...
return viewHolder;
}
@Override
public void onBindViewHolder(ContactsAdapter.ViewHolder viewHolder, int position) {
int itemPosition = viewHolder.getAdapterPosition();
Multiples item = mItems.get(itemPosition);
// Load the state by the previous saved state
// default value is false.
if(mImageStates.get(itemPosition)) {
// show the images or something.
} else {
// hide the images or something.
}
}
public void setState(int position, boolean isVisible) {
mImageStates.put(position, isVisible);
}
}
, теперь вы можете изменить видимость элемента состояния с помощью:
yourAdapter.setState(yourItemPosition, true);
, а затем уведомить адаптер об изменении с помощью:
yourAdapter.notifyItemChanged(yourItemPosition);
или сбросьте все, если у вас есть много пунктов для изменения:
yourAdapter.notifyDataSetChanged();