【问题标题】:Android Adapter getView Method: call super.getView or not?Android Adapter getView 方法:调用 super.getView 与否?
【发布时间】:2013-05-22 10:05:42
【问题描述】:

我看到了直接使用 convertView 参数的 getView 实现:

if(convertView!=null)
    ...
return convertView

另一种实现调用super.getView:

View view = super.getView( position, convertView, parent );
if(view!=null)
    ...
return view

我的问题是,正确的方法是什么?

【问题讨论】:

    标签: android super android-adapter


    【解决方案1】:

    super.getView( position, convertView, parent );不安全,因为 super 什么都不做。

    getView 属于Adapter 接口。

    here你可以找到代码

    【讨论】:

    • 谢谢,我也改成题目了。
    • 调用与否没有任何区别。
    • 这取决于适配器不是吗?如果它是标准适配器之一,则无关紧要,因为没有可谈的实现,但对于第三方库或 CursorAdapter 实际上有。
    • @britzl 我从不在 CursorAdapter 中覆盖 getView 。事实上,Android 团队提供了一对不同的回调(newView/bindView)来管理视图。对于第三方库,我希望记录它是必需的
    • @blackbelt:是的,我的意思是一般来说你不应该调用 super.getView()。我只是想指出,它不能 100% 保证它永远不会那样工作
    【解决方案2】:

    我猜你说的是Adapter.getView()。您要扩展哪个适配器?

    大多数适配器本身没有实现 getView() 并希望您在自己膨胀视图之前检查 convertView 是否为空。

    我说大多数适配器,因为有例外。如果您从第三方 -lib 子类化适配器,则适配器实际上可能提供 getView() 的实现并处理视图回收。在这种情况下,你真的应该调用超类。

    另外,如果你看一下the code for CursorAdapter,它实际上有一个 getView() 的实现

    【讨论】:

    • 谢谢。我没有编写真正的代码。了解有关 getView 的更多信息,而不是在不了解原因的情况下使用简单的复制和粘贴代码是一个普遍的问题。
    • 啊,好吧,如果这是一个一般性问题,那么不,你不应该调用 super.getView()。您应该检查 convertView 是否为空,如果是,您应该扩充一个新视图,否则重用您拥有的视图。适配器最常见的用途可能是 BaseAdapter 或 ListAdapter ,在这两种情况下您都不应该调用 super.getView()
    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多