В вашем адаптере должен быть другой массив целых чисел, чтобы отслеживать элементы, по которым щелкают.Сначала инициализируйте массив целых чисел всеми.
// Define an array like the following in your adapter
private int[] selectedItems = new int[yourDataList.size()]; // Initialize the array to have the same size as your data list.
Затем инициализируйте массив со всеми.Попробуйте использовать такую функцию в своем адаптере.
private void initializeSeledtedItems() {
for(int item : selectedItems) item = 1;
}
Теперь в вашем onBindViewHolder
установите видимость ImageView
в ваших RecyclerView
элементах на основе значения, найденного в массиве selectedItems
.
if(selectedItems[position] == 1) heart_image_view.setVisibility(View.VISIBLE);
else heart_image_view.setVisibility(View.GONE);
В onClickListener
измените массив selectedItems
так, чтобы только выбранный элемент имел значение один, а все остальные - нули.Затем позвоните notifyDataSetChanged
, чтобы изменения вступили в силу.
private void setSelectedItem(int position) {
for(int i = 0; i < selectedItems.length(); i++) {
if(i == position) selectedItems[i] = 1;
else selectedItems[i] = 0;
}
}
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
setSelectedItem(position);
notifyDataSetChanged();
}
}
}
});
Надеюсь, это поможет!