从ListAdapter获取缓存视图

时间:2012-01-23 20:08:49

标签: android android-listview listadapter android-adapter

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

我想知道,如果有办法获得getView()创建的所有视图?例如。如果列表项视图在销毁活动时需要释放一些资源,那么通过所有列表项视图并告诉它们释放资源会很好。

4 个答案:

答案 0 :(得分:4)

嗯, 不是 就像使用ListView迭代ListView#getChildAt(int)一样简单 - ListView是{{1}子类 - 和AbsListView实现用于保存将被重用的AbsListView的{​​{1}}。

在使用RecycleBinView放置在与其父级(列表视图)分离的View之前,使用RecycleBin使其无法访问。

您应该实施的是ViewGroup#detachViewFromParent(View)界面,当getChildAt(int)移至RecyclerListener时,该界面会通知您。

答案 1 :(得分:0)

由于ListViewViewGroup,您应该可以像这样迭代子视图:

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被垃圾收集,您的适配器将被垃圾收集,这意味着您的视图将被收集。除非你对这种行为有一个可衡量的问题,否则我不打算尝试优化它。