У меня есть просмотр списка, где каждый элемент списка может содержать 1 или более кликабельных изображений.Нажатие на них запускает действие, которое показывает полноэкранную версию изображения.
Следующий код (слегка упрощенный) устанавливает OnClickListeners
в моей реализации GetView()
для каждого изображения в каждом ListItem
.Это сработало идеально.
ImageView imageView = (ImageView)convertView.findViewById(R.id.image_res);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ActivityLauncher.startPhotoViewerActivity(mContext, item);
}
});
Однако для повышения производительности я решил сохранить каждое представление в памяти после его создания в первый раз.Я делаю это вместо использования convertView
, поскольку существует 4-5 различных типов представлений, и они иногда динамически создаются в коде, что затрудняет повторное использование.
Как только я начинаю хранить представления в памятии затем возвращая уже построенные представления во время последующих вызовов на getView()
на основе позиции, производительность значительно улучшается, но OnClickListeners
начинает вести себя неуклюже.
В частности, теперь, когда происходит прикосновение к данному изображению, OnClickListener
ибо оно может сработать немедленно или вообще не сработать.В тех случаях, когда он не срабатывает сразу, он может срабатывать, как только начинается прокрутка.Если это не запускает OnClickListener
для запуска, щелчок назад (для выхода из действия) может вызвать его.Если это не сработает, закрытие всех действий нажатием НАЗАД) и повторный вход в приложение вызовут все очереди OnClickListeners
.В одном случае я нажимал 25 раз на разные изображения безрезультатно.Затем я закрыл все действия и затем снова щелкнул значок приложения, что открыло все 25 предварительных просмотров изображений.
Есть идеи относительно того, что вызывает это?Что меня интересует, так это то, что OnClickListeners
, очевидно, установлены правильно, потому что они действительно открывают активность просмотра фотографий в определенный момент времени.Неправильное изображение никогда не открывается, и никогда не бывает случаев, когда они НИКОГДА не стреляют.Проблема в том, что они могут срабатывать немедленно или намного позже.
Не рекомендуется ли сохранять представления для каждого элемента списка и возвращать их в зависимости от положения из getView()
, как я делаю?Любая помощь с благодарностью.