2012-05-18 2 views
1

У меня есть несколько списков ListView, управляемых пользовательскими адаптерами (ArrayAdapter и CursorAdapter). В функциях getView() и bindView() адаптеров я создаю строку в ListView и устанавливаю Listener для конкретного элемента пользовательского интерфейса в строке.Android - Утилизация прослушивателей в адаптере

В настоящее время, когда строки ListView отправляются в Recycler, слушатель все еще подключен, поэтому память никогда не выпускается. Я не вижу обратного вызова, когда строка удаляется, что даст мне возможность отключить слушателя до того, как строка будет переработана.

Как управлять слушателем в строках ListView? У меня есть только getView()/bindView(), чтобы добавить слушателя в строку, но ничего не удалять.

Благодаря

ответ

0

После некоторой игры вокруг я решил использовать шаблон ViewHolder, и в этом я имею переменную, которая отслеживает слушателя. Когда предоставляется переработанное представление (где это применимо), я вытаскиваю слушателя (он все еще существует ) и не забудьте зарегистрировать его как слушателя, прежде чем создавать нового слушателя и регистрировать его на своем месте. Это, вероятно, не поймает КАЖДОГО слушателя, но я в порядке с несколькими строками ListView, застрявшими в памяти.

0

Android OS делает рециркуляцию мнения о ListView Его для вас. Представления генерируются «на лету», когда пользователь прокручивает список и уничтожается, когда они выходят из поля зрения. ОС Android разрушает представления, когда другому приложению требуется больше памяти, а некоторые из ваших объектов не используются, сортировка коллекции мусора.

И что касается вашего вопроса об удалении listeners, они автоматически удаляются, поскольку объект, на который они указывают, больше не существует, и они также помечены как объекты мусора.

+1

Спасибо за ваш ответ. Утилизация хороша, но это отличает от фактического избавления от нее. Как Android мог бы распоряжаться объектом, когда есть внешняя ссылка на него (слушатель)? Я имею в виду, разве это не определение утечки памяти? – Tyler

Смежные вопросы