1

我有一些由自定义适配器(ArrayAdapter 和 CursorAdapter)驱动的 ListView。在适配器的 getView() 和 bindView() 函数中,我在 ListView 中创建了一行并将侦听器设置为该行中的特定 UI 元素。

目前,当 ListView 行被发送到 Recycler 时,侦听器仍然处于连接状态,因此永远不会释放内存。我没有看到处理该行时的回调,这将使我有机会在该行被回收之前分离侦听器。

如何管理 ListView 行中的侦听器?我只有 getView()/bindView() 将侦听器添加到行,但没有删除它们。

谢谢

4

2 回答 2

0

Android OS 会ListView为您执行行视图的回收。当用户滚动列表时,视图会即时生成,当它们离开视图时会被销毁。每当其他应用程序需要更多内存并且您的某些对象没有被使用时,Android OS 就会破坏视图,这是一种垃圾收集。

至于您关于删除的问题listeners,它们会自动删除,因为它们指向的对象不再存在并且它们也被标记为垃圾对象。

于 2012-05-18T23:02:24.990 回答
0

在玩了一些之后,我决定使用 ViewHolder 模式,并且在其中我有一个跟踪侦听器的变量。当提供回收视图(如果适用)时,我拉出监听器(它仍然存在)并确保将其取消注册为监听器,然后再创建一个新的监听器并在其位置注册它。这可能不会抓住每个听众,但我可以接受一些 ListView 行被卡在内存中。

于 2012-05-22T17:35:17.197 回答