【问题标题】:What is "convertView" parameter in ArrayAdapter getView() method什么是 ArrayAdapter getView() 方法中的“convertView”参数
【发布时间】:2010-12-07 22:12:11
【问题描述】:

谁能告诉我Adapter 类的getView() 方法中的convertView 参数是做什么用的?

这是来自here的示例代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.row, null);
    }
    Order o = items.get(position);
    if (o != null) {
        TextView tt = (TextView) v.findViewById(R.id.toptext);
        TextView bt = (TextView) v.findViewById(R.id.bottomtext);
        if (tt != null) {
            tt.setText("Name: "+o.getOrderName());                            }
        if(bt != null){
            bt.setText("Status: "+ o.getOrderStatus());
        }
    }
    return v;
}

我们应该通过convertView 传递什么?

我发现了什么,take from here

获取一个在指定位置显示数据的View 数据集。您可以手动创建视图或从 XML 布局文件。当 View 膨胀时,父 View (GridView, ListView...) 将应用默认布局参数,除非您使用 inflate(int, android.view.ViewGroup, boolean) 指定根视图 并防止附着在根上。

参数

position -- 在适配器的数据集中我们想要查看的项目的项目的位置。

convertView -- 如果可能的话,要重用的旧视图。注意:您应该在之前检查此视图是否为非空且类型合适 使用。如果无法将此视图转换为显示 正确的数据,这个方法可以创建一个新的视图。

parent -- 此视图最终将附加到 Returns 的父级

returns -- 指定位置数据对应的View。

【问题讨论】:

    标签: java android


    【解决方案1】:

    你不应该自己调用那个方法。

    Android 的ListView 使用Adapter 来填充Views。当ListView 显示时,它开始调用getView() 来填充自己。当用户滚动时,应该创建一个新视图,因此为了性能,ListViewAdapter 发送一个旧视图,它在convertView 参数中不再使用。

    【讨论】:

    • 我不太明白“当用户滚动时应该创建一个新视图,因此为了提高性能,ListView 会向适配器发送一个旧视图,它在 convertView 参数中不再使用。”你说ListView 不会一次填充所有视图?
    • @Braveyard:不。想象一下ListView 将容纳 1.000 个项目。它无法将所有内容都加载到内存中,它只使用在屏幕上显示的最少数量。
    • 这样做的一个重要副作用是,将任何状态信息存储在 ListView 的视图中必然是一场灾难。确保将每个项目的状态存储在适配器中,而不是视图中。
    • @jib:或者您可以正确处理视图更改状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多