Android的ListView的每一个Item都有不同的布局
2015-08-04 14:58
531 查看
大家都知道,ListView中的数据是经过adapter适配到屏幕上的,所以要实现listview中每一个item的内容需要去操作adapter中的代码:
在使用不同布局的时候我们要重构以下两个方法:getItemViewType和getViewTypeCount.
创建不同的ViewHolder,通过调用返回的type类型来确定是哪一个item就可以了。
在使用不同布局的时候我们要重构以下两个方法:getItemViewType和getViewTypeCount.
public class MyAdapter extends BaseAdapter { ArrayList<String> ls; Context mContext; LinearLayout linearLayout = null; LayoutInflater inflater; TextView tex; final int VIEW_TYPE = 3; final int TYPE_1 = 0; final int TYPE_2 = 1; final int TYPE_3 = 2; public MyAdapter(ArrayList<String> list, Context context) { mContext = context; ls = list; } @Override public int getItemViewType(int position) { return super.getItemViewType(position); } @Override public int getViewTypeCount() { return 3; } @Override public int getCount() { return ls.size(); } @Override public Object getItem(int position) { return ls.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder1 holder1 = null; ViewHolder2 holder2 = null; ViewHolder3 holder3 = null; int type = getItemViewType(position); if (convertView == null) { inflater = LayoutInflater.from(mContext); switch (type) { case TYPE_1: convertView = inflater.inflate(R.layout.layout_item1, parent, false); holder1 = new ViewHolder1(); holder1.tv1 = (TextView) convertView.findViewById(R.id.tv1); convertView.setTag(holder1); break; case TYPE_2: convertView = inflater.inflate(R.layout.layout_item2, parent, false); holder2 = new ViewHolder2(); holder2.tv2 = (TextView) convertView.findViewById(R.id.tv2); convertView.setTag(holder2); break; case TYPE_3: convertView = inflater.inflate(R.layout.layout_item3,parent,false); holder3 = new ViewHolder3(); holder3.tv3 = (TextView)convertView.findViewById(R.id.tv3); convertView.setTag(holder3); } }else{ switch (type){ case TYPE_1: holder1 = (ViewHolder1)convertView.getTag(); break; case TYPE_2: holder2 = (ViewHolder2)convertView.getTag(); break; case TYPE_3: holder3 = (ViewHolder3)convertView.getTag(); break; } } switch (type){ case TYPE_1: holder1.tv1.setText("我是第一个"+(position + 1)); break; case TYPE_2: holder2.tv2.setText("我是第二个"+(position + 1)); break; case TYPE_3: holder3.tv3.setText("我是三个"+(position + 1)); break; } return convertView; } public static class ViewHolder1 { TextView tv1; } public static class ViewHolder2 { TextView tv2; } public static class ViewHolder3 { TextView tv3; } }
创建不同的ViewHolder,通过调用返回的type类型来确定是哪一个item就可以了。
相关文章推荐
- android几个知识点笔记
- Android中图片大小和屏幕密度的关系讲解
- Android中图片大小和屏幕密度的关系讲解
- Android初学习 - 4.0以后支持的Switch按钮
- Android屏幕适配
- AndroidStudio虚拟机启动失败
- Android BatteryStatsHelper深入理解(and5.1)
- Android 电量监控、关机、重启功能的实现
- Android 自定义ViewGroup 实现FlowLayout,动态添加布局
- android登陆
- Android 扩大view点击范围
- Android实现抽奖转盘
- Android 存储学习之SQLite数据库的基本操作
- android相关报错之<Wrong orientation? No orientation specified, and the default is horizontal。。
- Android本地消息推送
- android强迫症头像BadgeView
- 推荐4个Android引导页控件
- 推荐3个Android筛选器控件
- android平台,利用ffmpeg对android摄像头采集编码
- 百度——地图API——Android—应用集成离线地图