8

我是 android 编程新手,并使用 Adapters (for a 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

感谢您的阅读,对不起我的英语不好...

4

3 回答 3

6

您可以使用

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

如果您只是从“即用型”适配器(不是BaseAdapter)派生的,例如SimpleAdapterArrayAdapter,因为它们已经getView().

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

如果您从 派生BaseAdapter,您将不得不手动实现整个方法,正如您在第一个示例中所描述的那样,因为它没有开箱即用:http: //grepcode.com/file/repository.grepcode。 com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/BaseAdapter.java#BaseAdapter

于 2012-09-15T18:57:52.520 回答
2

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

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

于 2012-09-15T18:37:24.887 回答
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 线程

于 2012-09-15T19:35:11.230 回答