ListView不同Item的适配详解
来源:互联网 发布:java 字符串转义 编辑:程序博客网 时间:2024/05/16 08:47
本文将介绍ListView如何使用不同的布局作为Item
实现的示例效果:
图中实现了两种不同的布局,要实现使用不同的Item,就要在适配器(Adapter)中实现 下面两个方法
public int getViewTypeCount() {return 2;}public int getItemViewType(int position) { return beens.get(position).getType(); }getViewTypeCount() 是返回你的item类型的总数getItemViewType() 是返回你的当前item的类型
注意:上代码:getItemViewType() 方法 返回的type必须是0开始的, 比如你有3种类型的item, 那么你在这个type就应该定义为0,1,2这3个类型;而不是1,2,3这3种类型; 而如果你用后面1,2,3定义类型的话, 就会报.ArrayIndexOutOfBoundsException 也就是越界的错误,因为你的getViewTypeCount()为3,而当 getItemViewType返回3的话,实际上它的索引是4,所以就会报错。class MyAdapter extends BaseAdapter { @Override public int getCount() { return beens.size(); } @Override public Object getItem(int i) { return beens.get(i); } @Override public long getItemId(int i) { return i; } //重点方法**设定你的布局有几中Item, @Override public int getViewTypeCount() { return 2; } //重点方法** 用来判断当前的item是那种类型的, @Override public int getItemViewType(int position) { return beens.get(position).getType(); } @Override public View getView(int position, View convertView, ViewGroup viewGroup) { ViewHolder holder=null; //获取当前的item的类型 int type=getItemViewType(position); //convertView为空时,定义view if(convertView==null){ switch (type){ case 0: convertView= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item1,viewGroup,false); holder=new ViewHolder(); holder.item1_name= (TextView) convertView.findViewById(R.id.item1_name); convertView.setTag(holder); break; case 1: convertView= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item2,viewGroup,false); holder=new ViewHolder(); holder.item2_name= (TextView) convertView.findViewById(R.id.item2_name); holder.image_left= (ImageView) convertView.findViewById(R.id.item2_image_left); holder.iamge_right= (ImageView) convertView.findViewById(R.id.item2_image_right); convertView.setTag(holder); break; } }else { holder = (ViewHolder) convertView.getTag(); } switch (type){ case 0: holder.item1_name.setText(beens.get(position).getItemName()); break; case 1: holder.item2_name.setText(beens.get(position).getItemName()); holder.image_left.setImageResource(R.mipmap.emoji_231); holder.iamge_right.setImageResource(R.mipmap.emoji_231); break; } return convertView; } class ViewHolder { private TextView item1_name; private TextView item2_name; private ImageView image_left; private ImageView iamge_right; } }
0 0
- ListView不同Item的适配详解
- ListView适配不同item范例
- ListView不同布局的item的复用方法详解
- 实现ListView不同的Item
- ListView定制不同的Item
- listView的不同item展示
- ListView显示不同的item
- listview不同的item展示
- ListView的不同item加载不同Layout
- ListView的不同item加载不同Layout
- listview不同的项目布局(item layout)
- listView中 的不同item类型
- Android ListView加载不同的item
- ListView的每个Item都不同布局
- listview不同风格item的实现
- 加载listview里面不同样式的item
- 实现listView的不同布局item
- Android listView 中嵌套不同的item
- Settings.System.putXXX数据变化,ContentObserver监听
- ubuntu16.04+cuda8.0+caffe安装
- [转载]关于定义hashcode时要使用31这个数的解释
- Linux-查看cpu型号
- 第十六周项目4-英文单词的基数排序
- ListView不同Item的适配详解
- 动态顺序表的基本操作
- C#获取mysql中记录的一种方法
- 预装Windows 10的电脑改装成 Win7 系统的参考教程
- Hive SHELL
- Android开发基础 -- 最强 Android Studio 使用小技巧和快捷键
- SpringBoot集成mybatis
- 1217
- POJ 1466 Girls and Boys 已翻译