0

我一直在调试我的应用程序,我看到当我滚动列表视图时,调用类 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

4

3 回答 3

2

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

检查http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

规则是,首先设置您的自定义视图,将所有内容打包在您的支架内并将此支架固定到视图上,第二次使用该视图 android 简单地提取支架信息(非常快)。

于 2011-09-14T18:36:17.010 回答
0

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

于 2011-09-14T19:30:46.480 回答
0

由于创建的对象数量,它可能会变慢。为了性能,您应该重用您的行。请参阅此处的getView实现:http: //developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List4.htmlhttp://developer.android.com/resources/samples /ApiDemos/src/com/example/android/apis/view/List14.html

于 2011-09-14T18:29:03.267 回答