У меня есть несколько списков ListView, управляемых пользовательскими адаптерами (ArrayAdapter и CursorAdapter). В функциях getView() и bindView() адаптеров я создаю строку в ListView и устанавливаю Listener для конкретного элемента пользовательского интерфейса в строке.
В настоящее время, когда строки ListView отправляются в Recycler, слушатель все еще подключен, поэтому память никогда не выпускается. Я не вижу обратного вызова, когда строка удаляется, что даст мне возможность отключить слушателя до того, как строка будет переработана.
Как управлять слушателем в строках ListView? У меня есть только getView()/bindView(), чтобы добавить слушателя в строку, но ничего не удалять.
благодаря
После некоторых игр я решил использовать шаблон ViewHolder, и в этом я имею переменную, которая отслеживает слушателя. Когда предоставляется переработанное представление (где это применимо), я вытаскиваю слушателя (он все еще существует) и не забудьте зарегистрировать его как слушателя, прежде чем создавать нового слушателя и регистрировать его на своем месте. Это, вероятно, не поймает КАЖДОГО слушателя, но я в порядке с несколькими строками ListView, застрявшими в памяти.
Android OS выполняет ListView
строк в ListView
для вас. Представления генерируются "на лету", когда пользователь прокручивает список и уничтожается, когда они выходят из поля зрения. ОС Android разрушает представления, когда другому приложению требуется больше памяти, а некоторые из ваших объектов не используются, сортировка коллекции мусора.
И что касается вашего вопроса об удалении listeners
, они автоматически удаляются, поскольку объект, на который они указывают, больше не существует, и они также помечены как объекты мусора.