#android
#Android
Вопрос:
Я внедряю ListView
с использованием пользовательских адаптеров. Для повышения производительности я возвращаю вновь увеличенное значение, View
if convertView
равно null, иначе возвращаю переработанное View
.
Теперь в этом процессе я использовал шаблон ViewHolder и setTag()
метод View
. Изначально я думал, что это своего рода закладки, но я не совсем понял, как это использовать. Я проверил другой пост в блоге, где они просто использовали это в коде.
Может кто-нибудь, пожалуйста, объяснить мне использование setTag()
метода?
Ответ №1:
В принципе, вы можете сохранить любой объект в виде тега (и привести его обратно при вызове getTag
). Это может быть простой идентификатор или некоторые сложные данные. Это некоторая информация, которую вы связываете с этим представлением.
В случае списков и шаблона view holder это простой объект, который содержит ссылки на представления помеченного представления (группы). Таким образом, вам не нужно вызывать findViewById
каждый раз, когда вы обновляете содержимое представления. Это просто оптимизация производительности.
Можем ли мы сохранить данные элемента списка в теге view?
Нет. Из-за повторного использования view у вас есть (например) 10 просмотров, которые повторно используются для 1000 элементов списка. Хранение данных в теге здесь не имеет смысла. Для сохранения состояния элемента списка лучше использовать пользовательский объект данных (возможно, тот же массив, который содержит отображаемые данные), или вы сохраняете его сразу при изменении элемента списка.
Смотрите также документацию по setTag.
Комментарии:
1. спасибо за ответ. Итак, я понимаю, что мы можем хранить объекты. Можем ли мы сохранить состояние объекта, например, состояние с установленным флажком в listview?