我在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);
答案 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的标记字段中,因此您可以立即访问它们而无需重复查找它们