Android 调用基本适配器.getview()方法时,ListView会变慢

Android 调用基本适配器.getview()方法时,ListView会变慢,android,performance,android-layout,baseadapter,Android,Performance,Android Layout,Baseadapter,我一直在调试我的应用程序,我看到当我滚动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() , ar

我一直在调试我的应用程序,我看到当我滚动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时,不要创建ListItems,因为创建的对象数量太多,它可能会变慢。为了提高性能,您应该重用行。请参见此处的
getView
实现:并且

ListView针对性能进行了高度优化,您应该在ListAdapter中使用ViewHolder来缓存ListItems

检查


规则是,首先设置customview,将支架内的所有内容打包并将此支架固定到视图上,第二次使用视图时,android simple提取支架信息(非常快)。

您不应该在每次调用getView时创建新视图。传入的convertView允许use重用现有视图。在您的情况下,这将是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查找