关于android中持有者的基本信息

时间:2013-08-28 08:51:53

标签: android

我在android中搜索关于“holder”的一些信息...因为我看过一些使用它的代码在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);

6 个答案:

答案 0 :(得分:0)

ViewHolder用于改善列表滚动的性能。

以下是您从Android Developer Website中提取的一些信息。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在android中,listview使用转换视图来获得更好的性能,它将重用列表项视图,每次都避免创建视图,并且视图持有者用于在转换视图中保留子视图引用。您可以深入查看listview源代码以获取详细信息,谢谢

答案 3 :(得分:0)

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

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

了解更多信息refer here

答案 4 :(得分:0)

ViewHolder用于避免在所有呼叫上运行的昂贵呼叫。我指的是通过方法findViewById()获取对要修改的每个对象的引用。在布局内搜索对象树的特定控件ID也可能是昂贵的,这取决于布局本身的复杂性。

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

static class ViewHolder {
    ImageView imageview;
    Checkbox checkbox;
}

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

答案 5 :(得分: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的标记字段中,因此您可以立即访问它们而无需重复查找它们