重写Adapter.getView

时间:2012-09-15 12:41:44

标签: android android-listview adapter

我是Android编程的新手,并使用适配器执行第一步(对于ListView)。

覆盖Adapter.getView我经常看到这样的事情:

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;
}

我的问题是反对这一点:

public View getView(int position, View convertView, ViewGroup parent) {

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

    // play with itemView

    return itemView;
}

这似乎对我有用,但我确信我有一点很重要:D

感谢阅读并抱歉我的英语不好......

3 个答案:

答案 0 :(得分:6)

您可以使用

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 < / p>

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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线程