我一直在调试我的应用程序,我看到当我滚动listview时,调用BaseAdapter类的方法getView()来生成新视图
public View getView(int position, View convertView, ViewGroup parent) {
Article article = this.articles.get(position);
return new MainView(this.context, articulo.getTitle() , articles.getDescription(),articles.getImgUrl());) }
当我滚动listActivity以查看新项时,再次调用此方法以创建下面的列表视图项,因此列表项具有ListActivity变慢的图像,是否有任何方法可以创建所有项视图一次,当我们滚动listActivity时不创建ListItem
答案 0 :(得分:2)
ListViews针对性能进行了高度优化,您应该使用ListAdapter中的ViewHolder来缓存ListItem。
规则是,首先设置你的自定义视图,将所有内容打包到你的持有者中并将此持有者固定到视图上,第二次使用视图时android简单地提取持有者信息(非常快)。
答案 1 :(得分:0)
由于创建的对象数量可能会减慢速度。为了提高性能,您应该重用行。请参阅此处的getView
实施:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List4.html和http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html
答案 2 :(得分:0)
每次调用getView时都不应创建新视图。传入的convertView允许使用重用现有的View。在您的情况下,这将是MainView的一个实例。所以你可以这样做:
MainView mv;
if (convertView != null){
mv = (MainView) convertView;
((TextView) mv.findViewById(R.id.title)).setText(articulo.getTitle());
// similar for description and imgUrl
} else {
mv = new MainView(...);
}
return mv;
此外,您可以使用Michele建议的ViewHolder模式。这将允许您在设置标题等时避免findViewById查找。Here is a great explanation of ViewHolder。