[Android学习]ListView显示多种item
2016-03-05 10:11
537 查看
在平常使用ListView的时候,通常我们使用的item的layout都是同一个。当需要有多个不同的item的layout时,有两中处理的办法。
第一种方法: 重写
缺点:
无法重用convertView,每次都会重新创建新的view。在item数目非常多的时候,很容易会造成OOM和ListView滑动卡顿。
第二种方法: 其实Adapter和ListView早就为我们准备好处理这种情况的方法:
我们需要重写
优点:
多个item的convertView会被重用。这种做法在其他地方也有很好的用处,比如,ListView的优化上,对于ListView的包含的item较大时,我们可以对item切片分块来加载,这样就需要显示多种item,正好就可以使用这种做法。
第一种方法: 重写
getView()方法
[code]@Override public View getView(int position, View convertView, ViewGroup parent) { int type=listDatas.get(position); switch(type) { case 1: convertView = inflater.inflate(R.layout.item1, null); break; case 2: convertView = inflater.inflate(R.layout.item2, null); break; ... } return convertView; }
缺点:
无法重用convertView,每次都会重新创建新的view。在item数目非常多的时候,很容易会造成OOM和ListView滑动卡顿。
第二种方法: 其实Adapter和ListView早就为我们准备好处理这种情况的方法:
getViewTypeCount(),
getItemViewType()。
getViewTypeCount():返回不同种item的数目,
getItemViewType():返回的item类别的唯一标识,标识可以自己确定。
我们需要重写
getViewTypeCount(),
getItemViewType(),
getView()方法。假设我们在偶数时显示item1,奇数时显示item2.
[code]@Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { return position%2; } @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); if(convertView==null) { switch(type) { case 0: convertView = inflater.inflate(R.layout.item1, null); break; case 1: convertView = inflater.inflate(R.layout.item2, null); break; default: convertView = inflater.inflate(R.layout.default_item, null); break; } } // 绑定数据 switch(type) { case 0: ... break; case 1: ... break; default: ... break; } return convertView; }
优点:
多个item的convertView会被重用。这种做法在其他地方也有很好的用处,比如,ListView的优化上,对于ListView的包含的item较大时,我们可以对item切片分块来加载,这样就需要显示多种item,正好就可以使用这种做法。
相关文章推荐
- Android学习之Json解析库Gson
- android方法汇总
- android日期相关知识
- Android在Fragment中使用Tab
- Android开发之(include)引入布局
- android 之jni开发步骤
- Android开发之TableLayout布局
- Android开发之RelativeLayout布局
- Android开发之LinearLayout布局
- 9patch图片总结
- Android 横屏,竖屏的设置
- android开发之路04(初级android工程师必会,你懂得!)
- Android调用拍照和本地相册并上传给服务器
- Android中Loader及LoaderManager的使用
- Android异常——常见的RunTimeException
- 01.1android Service的概念及作用
- android开发进阶导航
- Android Tips
- Three ways to implements an Android OnClickListener
- Android AsyncTask基础