首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖Adapter.getView

覆盖Adapter.getView
EN

Stack Overflow用户
提问于 2012-09-15 20:41:44
回答 3查看 11K关注 0票数 8

我对android编程和使用适配器的第一步都是新手(对于ListView)。

在覆盖Adapter.getView时,我经常会看到这样的情况:

代码语言:javascript
复制
public View getView(int position, View convertView, ViewGroup parent) {

    View itemView = null;

    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) parent.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        itemView = inflater.inflate(R.layout.table_row, null);
    } else {
        itemView = convertView;
    }

    // play with itemView

    return itemView;
}

我的问题是,是什么反对这一点:

代码语言:javascript
复制
public View getView(int position, View convertView, ViewGroup parent) {

    View itemView = super(position, convertView, parent);

    // play with itemView

    return itemView;
}

这似乎对我很有效,但我确信我遗漏了一个很大的要点:D

感谢您的阅读,并为我糟糕的英语感到抱歉。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-16 02:57:53

您可以使用

代码语言:javascript
复制
View itemView = super(position, convertView, parent);

如果您是从“可供使用”的适配器(而不是BaseAdapter)派生的,比如SimpleAdapterArrayAdapter,因为它们已经有了自己的getView()实现。

看看它们:用于ArrayAdapter的http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361和用于SimpleAdapter的http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113

如果从BaseAdapter派生,则必须手动实现整个方法,就像第一个示例中描述的那样,因为它没有现成的方法:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/BaseAdapter.java#BaseAdapter

票数 6
EN

Stack Overflow用户

发布于 2012-09-16 02:37:25

适配器的getView(..)-method可以是多种方式。唯一的问题是,哪一个是最有效的?

阅读一篇有趣的文章,让您更详细地理解ListView:http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

票数 2
EN

Stack Overflow用户

发布于 2012-09-16 03:35:11

如果你的意思是这段代码:

代码语言:javascript
复制
if (convertView == null) {
    LayoutInflater inflater = (LayoutInflater) parent.getContext()
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    itemView = inflater.inflate(R.layout.table_row, null);
} else {
    itemView = convertView;
}

这段代码允许Android创建相对较少的单元格(等于屏幕上可见的单元格数量+-),然后“回收”这些单元格-在用户滚动列表时反复使用它们,而不是为数组中的每个对象创建一个单元格。这将在以下方面帮助您:

  1. 节省内存-因为您不是为数组中的每个元素创建视图
  2. 节省CPU使用率-从xml文件创建视图对象(“膨胀”)是一项相对昂贵的任务,而且为数组中的每一项执行此操作可能会阻塞您的UI线程
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12437472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档