0

我的代码中有两种用于适配器实现的类型,但我不确定哪一种更好。

这是我的更新程序模式:

public View getView(int position, View convertView, ViewGroup parent) {
    Updater content;
    if(convertView == null) {
        final TextView msg = new TextView(parent.getContext());
        content = new Updater() {
            public void update(...) {
                // code to update the control msg
            }
        };
        convertView = msg;
        convertView.setTag(content);
    } else {
        content = (Updater)convertView.getTag();
    }
    content.update(...);
    return convertView;
}

// ...

private interface Updater {
    void update(...);
}

这是我的ViewHolder模式:

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if(convertView == null) {
        convertView = inflater.inflate(...);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder)convertView.getTag();
    }
    holder.setData(...);
    return convertView;
}

// ...

private class ViewHolder {
    public final TextView text;

    public ViewHolder(final View owner) {
        text = (TextView)owner.findViewById(R.id.text);
    }

    public void setData(...) {
        // ...
    }
}

我想知道哪个效率更高?我还可以Updater在更复杂的控件中实现接口,因此以通用方式更新不同的控件会更简单。所以我可以convertView不使用getTag(). 但是在上面的代码中,我使用了一个final在我的接口实现之外定义的变量。有人可以告诉我这是否会导致性能问题?我不知道带有最终变量的java内部会发生什么。

如果我的更新模式不好,请告诉我,为什么我应该使用ViewHolder模式,除了这个模式来自 Google IO。

4

1 回答 1

0

像这样的决定对性能几乎没有影响。两种解决方案同样有效。最终的键盘实际上可以通过允许编译器进行某些优化来提高性能,但它们肯定不会引起注意。

于 2013-04-19T05:29:36.540 回答