我之前已经了解了提高性能的好方法 - Holder Pattern。这是加速UI和动画的好主意
这显然是为什么以及如何使用它
我已经习惯了很多,但现在我对此有点困惑。
当调用getView方法时,它有三个参数,一个是converView。正如我所说,它是以前夸大的列表项目视图,所以这是一些问题。
提前致谢。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder =(ViewHolder) convertView.getTag();
}
答案 0 :(得分:1)
convertView
,则需要使用findViewById()
获取您的观看次数。这正是ViewHolder模式试图避免的。 findViewById()
是一种非常昂贵的方法,可能会降低您的应用速度,特别是如果您在滚动列表时经常调用它。RecyclerView
具有一个强制使用ViewHolder模式的适配器。答案 1 :(得分:0)
您无法在ViewHolder holder =(ViewHolder) convertView.getTag();
的第一行拨打getView
。因为convertView
可能是null
。再试一次:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHoldler holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(ctx).inflate(
R.layout.frag_home_gridview_item, null, false);
holder = new ViewHoldler();
holder.iv = (ImageView) convertView
.findViewById(R.id.gridview_item_label);
holder.tv = (TextView) convertView
.findViewById(R.id.gridview_item_name);
convertView.setTag(holder);
} else {
holder = (ViewHoldler) convertView.getTag();
}
holder.tv.setText(getItem(position));
holder.iv.setImageResource(this.ids[position]);
return convertView;
}
private class ViewHoldler {
ImageView iv;
TextView tv;
}
答案 2 :(得分:0)