1

我在 android 中搜索有关“持有人”的一些信息...因为我已经看到了一些在 gridview 中使用复选框时使用它的代码...但我找不到有关它的基本信息。如果有人可以帮助我,我会很高兴。这是使用 holder 的代码的一部分:

public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = mInflater.inflate(
                        R.layout.galleryitem, null);
                holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
                holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox);

                convertView.setTag(holder);
            }
            else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.checkbox.setId(position);
            holder.imageview.setId(position);
4

6 回答 6

0

ViewHolder 用于提高此处列表滚动的性能。

这是您从Android 开发者网站中提取的一条您可能感兴趣的信息。

于 2013-08-28T08:54:53.513 回答
0

使用 ViewHolder 可以避免在每个 getView() 方法中调用 findViewById()

于 2013-08-28T08:58:08.310 回答
0

在android中,listview使用convert view来获得更好的性能,它会重复使用list item view,避免每次都创建view,并且view holder用来保持convert view中的子视图引用。您可以深入了解列表视图源代码以获取详细信息,谢谢

于 2013-08-28T09:05:06.593 回答
0

您的代码可能会findViewById()在滚动期间频繁调用ListView,这会降低性能。即使适配器返回一个膨胀的视图进行回收,您仍然需要查找元素并更新它们。避免重复使用的一种方法findViewById()是使用“视图持有者”设计模式。

一个ViewHolder对象将每个组件视图存储在 Layout 的标签字段中,因此您可以立即访问它们而无需重复查找它们。

有关更多信息,请参阅此处

于 2013-08-28T09:08:27.617 回答
0

ViewHolder用于避免在所有调用上运行的昂贵调用。我指的是获得对该方法要修改的每个对象的引用findViewById()。根据布局本身的复杂性,在布局中搜索对象树的特定控件 ID 的成本也可能很高。

使用ViewHolder模式,我们可以保存对控件的引用,因此我们不必再次搜索它们。唯一ViewHolder的类将包含对我们必须处理布局的每个控件的引用,在您的情况下:

static class ViewHolder {
    ImageView imageview;
    Checkbox checkbox;
}

我们将使用 tag 属性中的引用保存持有者,在 Android 中的每个控件中都显示,使用setTag(),我们可以使用 获取它getTag()

于 2013-08-28T09:10:51.030 回答
0

这些链接可能会对您有所帮助。
http://xjaphx.wordpress.com/2011/06/16/viewholder-pattern-caching-view-efficiently/ http://vsvydenko.blogspot.in/2011/06/android-use-viewholder.html

您的代码可能在 ListView 滚动过程中频繁调用 findViewById() 会降低性能。即使适配器返回一个膨胀的视图进行回收,您仍然需要查找元素并更新它们。重复使用 findViewById() 的一种方法是使用“视图持有者”设计模式。

ViewHolder 对象将每个组件视图存储在 Layout 的 tag 字段中,因此您可以立即访问它们而无需重复查找它们

于 2013-08-28T09:18:05.873 回答