当列表显示并滚动时,ListAdapter.getView() 要么创建一个新的列表项视图,要么重新调整传递给它的现有视图(作为“convertView”)以显示新内容。
我想知道,是否有办法获取由 getView() 创建的所有视图?例如,如果列表项视图需要在 Activity 被销毁时释放一些资源,最好遍历所有列表项视图并告诉它们释放资源。
当列表显示并滚动时,ListAdapter.getView() 要么创建一个新的列表项视图,要么重新调整传递给它的现有视图(作为“convertView”)以显示新内容。
我想知道,是否有办法获取由 getView() 创建的所有视图?例如,如果列表项视图需要在 Activity 被销毁时释放一些资源,最好遍历所有列表项视图并告诉它们释放资源。
好吧,它并不像迭代ListView
using那样简单——the是一个子类ListView#getChildAt(int)
——并实现used 来保存将被重用的 s。ListView
AbsListView
AbsListView
RecycleBin
View
在 aView
被放置在RecycleBin
它与它的父级(列表视图)分离之前ViewGroup#detachViewFromParent(View)
,使用getChildAt(int)
.
您应该实现的是RecyclerListener
当 aView
移动到RecycleBin
.
由于ListView
is 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
它是java。您不能命令应用程序或实例真正被销毁以释放资源。使用 finalize() 您只能提高 java 机器执行此操作的概率。
除非您的适配器在此 Activity 之外使用(在这种情况下,您真的不知道您不再需要这些视图吗?),您对该适配器的唯一引用是在 Activity 中。这意味着如果您的 Activity 被垃圾收集,您的适配器将被垃圾收集,这意味着您的视图将被收集。除非您对此行为有可衡量的问题,否则我不会费心尝试优化它。