从逐渐被弱化的ListView说起

说到ListView,它曾经是Android UI开发中用的最多的组件之一,直到现在,很多应用还是用的ListView结构,但是现在逐渐被 androidx 中的 RecyclerView 所取代。

ListView的布局是自己实现的,

使用ViewHolder提高运行效率

ViewHolder 模式是提高 ListView 效率的一个很重要的方法。 ViewHolder 模式充分利用了 ListView 的视图缓存机制,避免了每次在调用 getView() 都通过 findViewById() 实例化控件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public View getView(int position,View convertView,ViewGroup parent){
Fruit fruit = getItem(position);
View view;
ViewHolder viewHolder;
if(convertView == null{
view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
viewHolder = new ViewHolder();
viewHolder.fruitImage=(ImageViewview.findViewById(R.id.fruit_image);
viewHolder.fruitName=(TextViewview.findViewById(R.id.fruit_name);
view.setTag(viewHolder);
//将 ViewHolder存储在View中
}else{
view = convertView;
//通过Tag找到缓存的布局
viewHolder = (ViewHolder)view.getTag());
}
//重新获取ViewHolder viewHolder.fruitImage.setImageResource(fruit.getImageId(;
viewHolder.fruitName.setText(fruit.getName());
return view;
}

孰优孰劣

在谷歌建议使用recyclerView的现在,为什么我们还在这里讨论孰优孰劣呢?

那么我们就先看看两个组件的优缺点:

ListView:
优点

  • 轻量级,当 view 只提供显示功能的话,代码简单。
    缺点
  • 实现功能相对有限,如果对于子view有更多功能要求的话,代码复杂。
  • 只能纵向滑动,实现横向滑动代码复杂。
  • 性能较差,需要自己改善代码,避免内存泄露。

RecyclerView
优点

  • 集成多个接口,功能强大。
  • 由于交给LayoutManager,可实现各种滑动方向。
  • 有完善的回收机制。
    缺点
  • 重量级,实现简单功能代码量较大。

所以说,对于一些功能简单的应用程序来说,ListView已经足够用了。例如现在微信中的卡券,由于没有实现复杂的动画以及其他事件,用ListView是刚好合适的。