Вы полагаетесь на представление в списке.В представлении списка используются повторно, поскольку они выходят за пределы экрана.Таким образом, чтобы сделать это, вы должны объявить boolean isSelected
для каждого элемента (так что лучшее место для этого - ваша модель элемента, которая содержит все свойства каждой сетки) и сделать это истинным, когда пользователь выбирает элемент сетки и всегда обновляетваш вид основан на , который логический не вид.
В настоящее время ваша модель содержит только URL-адрес ваших изображений.Если вам нужно сохранить логическое значение isSelected
, вы должны построить объект модели следующим образом:
public class ImageModel {
public String url;
public boolean isSelected;
}
, а затем использовать объекты поля в списке сетки:
public void onItemCheckedStateChanged(ActionMode actionMode, int i, long l, boolean b) {
ImageModel image = tab2_images.get(i);
if (image.isSelected) {
// Image is selected you need to deselect it
} else {
// Image is not selected you need to select it
}
}
В вашемАдаптер:
public View getView(int position, View convertview, ViewGroup parent) {
// Your view construction code
ImageModel image = tab2_images.get(i);
if (image.isSelected) {
// Show your check image view
} else {
// Image is not selected yet, hide your check image view
}
}
Надеюсь, это поможет, но вид сетки считается устаревшим, попробуйте использовать RecyclerView
, который является более эффективным и быстрым.