当列表显示并滚动时,ListAdapter.getView()要么创建一个新的列表项视图,要么重新调整传递给它的现有视图(作为“convertView”)以显示新内容。
我想知道,如果有办法获得getView()创建的所有视图?例如。如果列表项视图在销毁活动时需要释放一些资源,那么通过所有列表项视图并告诉它们释放资源会很好。
答案 0 :(得分:4)
嗯, 不是 就像使用ListView
迭代ListView#getChildAt(int)
一样简单 - ListView
是{{1}子类 - 和AbsListView
实现用于保存将被重用的AbsListView
的{{1}}。
在使用RecycleBin
将View
放置在与其父级(列表视图)分离的View
之前,使用RecycleBin
使其无法访问。
您应该实施的是ViewGroup#detachViewFromParent(View)
界面,当getChildAt(int)
移至RecyclerListener
时,该界面会通知您。
答案 1 :(得分:0)
由于ListView
是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
答案 2 :(得分:0)
是java。您无法命令应用程序或实例被真正销毁以释放资源。使用finalize(),你只能提高java机器执行它的概率。
答案 3 :(得分:0)
除非你的适配器在这个Activity之外使用(在这种情况下,你真的不知道你不再需要这些视图吗?),你对这个适配器的唯一引用是在Activity中。这意味着如果您的Activity被垃圾收集,您的适配器将被垃圾收集,这意味着您的视图将被收集。除非你对这种行为有一个可衡量的问题,否则我不打算尝试优化它。