0

当列表显示并滚动时,ListAdapter.getView() 要么创建一个新的列表项视图,要么重新调整传递给它的现有视图(作为“convertView”)以显示新内容。

我想知道,是否有办法获取由 getView() 创建的所有视图?例如,如果列表项视图需要在 Activity 被销毁时释放一些资源,最好遍历所有列表项视图并告诉它们释放资源。

4

4 回答 4

4

好吧,它并不像迭代ListViewusing那样简单——the是一个子类ListView#getChildAt(int)——并实现used 来保存将被重用的 s。ListViewAbsListViewAbsListViewRecycleBinView

在 aView被放置在RecycleBin它与它的父级(列表视图)分离之前ViewGroup#detachViewFromParent(View),使用getChildAt(int).

您应该实现的是RecyclerListener当 aView移动到RecycleBin.

于 2012-01-23T20:20:59.223 回答
0

由于ListViewis a ViewGroup,您应该能够像这样迭代子视图:

for (int i=0; i < myListView.getChildCount(); i++) {
    View v = myListView.getChildAt(i);

    //Check to see if this view has the resource, then release it
}

这个问题需要类似的东西:Android: Access child views from a ListView

于 2012-01-23T20:12:58.433 回答
0

它是java。您不能命令应用程序或实例真正被销毁以释放资源。使用 finalize() 您只能提高 java 机器执行此操作的概率。

于 2012-01-23T20:14:51.717 回答
0

除非您的适配器在此 Activity 之外使用(在这种情况下,您真的不知道您不再需要这些视图吗?),您对该适配器的唯一引用是在 Activity 中。这意味着如果您的 Activity 被垃圾收集,您的适配器将被垃圾收集,这意味着您的视图将被收集。除非您对此行为有可衡量的问题,否则我不会费心尝试优化它。

于 2012-01-23T20:35:54.227 回答