实现代码

Adapter的代码

其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局

TYPE_1...是三种类型.

在使用不同布局的时候,getItemViewType和getViewType不能少,一般是不用这两个函数的重载的

    class RunRankAdapter extends BaseAdapter {
ArrayList<HashMap<String, Object>> ls;
Context mContext;
LinearLayout linearLayout = null;
LayoutInflater inflater;
TextView tex;
final int VIEW_TYPE = ;
final int TYPE_1 = ;
final int TYPE_2 = ;
final int TYPE_3 = ; public RunRankAdapter(Context context,
ArrayList<HashMap<String, Object>> list) {
ls = list;
mContext = context;
} @Override
public int getCount() {
return ls.size();
} @Override
public Object getItem(int position) {
return ls.get(position);
} @Override
public long getItemId(int position) {
return ;
} // 每个convert view都会调用此方法,获得当前所需要的view样式
@Override
public int getItemViewType(int position) {
int p = position;
if (p == )
return TYPE_1;
else if (p == )
return TYPE_2;
else
return TYPE_3;
} @Override
public int getViewTypeCount() {
return ;
} @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);
// 按当前所需的样式,确定new的布局
switch (type) {
case TYPE_1: convertView = inflater.inflate(R.layout.item_runrank1,
parent, false);
holder1 = new ViewHolder1();
holder1.rank1 = (TextView) convertView
.findViewById(R.id.tv_list1_rank);
holder1.time1 = (TextView) convertView
.findViewById(R.id.tv_list1_time);
convertView.setTag(holder1);
break;
case TYPE_2:
convertView = inflater.inflate(R.layout.item_runrank2,
parent, false);
holder2 = new ViewHolder2();
holder2.rank2 = (TextView) convertView
.findViewById(R.id.tv_list2_rank);
holder2.time2 = (TextView) convertView
.findViewById(R.id.tv_list2_time);
convertView.setTag(holder2);
break;
case TYPE_3:
convertView = inflater.inflate(R.layout.item_runrank3,
parent, false);
holder3 = new ViewHolder3();
holder3.rank3 = (TextView) convertView
.findViewById(R.id.tv_list3_rank);
holder3.time3 = (TextView) convertView
.findViewById(R.id.tv_list3_time);
convertView.setTag(holder3);
break;
default:
break;
} } 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.rank1.setText("" + (position + ));
holder1.time1.setText(ls.get(position).get("time").toString());
break;
case TYPE_2:
holder2.rank2.setText("" + (position + ));
holder2.time2.setText(ls.get(position).get("time").toString());
holder2.totaldistance2.setText(ls.get(position)
break;
case TYPE_3:
holder3.rank3.setText("" + (position + ));
holder3.time3.setText(ls.get(position).get("time").toString());
break;
} return convertView;
} public class ViewHolder1 {
TextView rank1;
TextView time1;
} public class ViewHolder2 {
TextView rank2;
TextView time2;
} public class ViewHolder3 {
TextView rank3;
TextView time3;
}
}

使用方式:

声明并定义自己的Adapter,在ListView中设置他的Adapter

private RunRankAdapter runRankAdapter;
ArrayList<HashMap<String, Object>> runRank;
ListView lv_runRank;
runRank = new ArrayList<HashMap<String, Object>>();
runRankAdapter = new RunRankAdapter(this, runRank);
lv_runRank = (ListView) findViewById(R.id.lv_runRank);
lv_runRank.setAdapter(runRankAdapter);

利用type为Listview的item设置不同的布局

Android ListView中 每一项都有不同的布局的更多相关文章

  1. android listview中item通过viewpager实现《IT蓝豹》

    android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项 ...

  2. 继续聊WPF——如何获取ListView中选中的项

    在WPF中获Listview中选中的项,与WinForm里面有着很大的区别,要亲身去研究一下在WPF中如果处理,其实也不难,来,下面我们一起来通过一个简单的示例来感悟一下吧. 第一步就是建立一个WPF ...

  3. android ListView中button点击事件盖掉onItemClick解决办法

    ListView 1.在android应用当中,很多时候都要用到listView,但如果ListView当中添加Button后,ListView 自己的 public void onItemClick ...

  4. Android Listview中Button按钮点击事件冲突解决办法

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

  5. Android,LIstView中的OnItemClick点击无效的解决办法

    在List_Item布局文件中的根节点加上如下背景标黄的这一行 <?xml version="1.0" encoding="utf-8"?> < ...

  6. [Android] ListView中如何让onClick和onItemClick事件共存

    ListView中如何使用Button,让onClick和onItemClick事件共存 假如ListView的一条记录包含一个TextView文本框,一个Button按钮,怎样能让点击按钮有事件响应 ...

  7. Android ListView 中的checkbox

    Q:ListView + CheckBox 当上下滚动的时候有事会自动选中或取消 A:这个与ListView的缓存机制有关.当你屏幕滚动后,ListView中的item选项视图先检查缓存中是否有视图, ...

  8. Android ListView中Item点击事件失效解决方案

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...

  9. android ListView中CheckBox错位的解决

    貌似已经非常晚了,可是还是想记下笔记,想让今天完满. 在ListView中加了checkBox,但是发现点击改变其选中状态的时候,发现其位置错乱.状态改变的并非你选中的,百思不得其解.后面通过上网查资 ...

随机推荐

  1. php-fpm 的安装与LNMP测试

    1. 下载并安装PHP 1.1 编译安装 1.1.1 安装前的准备 下载并安装libmcrypt 和 libmcrypt-devel[root@test /opt/soft]# wget ftp:// ...

  2. Linux操作系统搭建JDK开发环境

    在Linuxer系统中,jdk环境常常是必需的,下面介绍下Oracle官方JDK安装方式 第一步:去jdk官网下载对应版本的JDK安装文件 第二步:解压文件,修改文件名 $ sudo mkdir /u ...

  3. Installation error INSTALL_FAILED_VERSION_DOWNGRADE错误

    最近折腾了一下Robotium自动化测试框架,发现问题还挺多,刚刚解决了一个问题,总算是把环境搞定了,可是一运行测试用例,发现又报Installation error INSTALL_FAILED_V ...

  4. Android 讯飞语音之语音合成(在线有声朗读)

    原文:http://www.cnblogs.com/scetopcsa/p/3845427.html 在线语音合成的使用方法: 首先下载相关的sdk,这个网址里有多种版本,我选择的Android. h ...

  5. javee学习-通过ServletContext对象实现数据共享

    1,设置值. ServletContext context = this.getServletConfig().getServletContext();//获得ServletContext对象 // ...

  6. 02_Jquery_02_元素选择器

    [简述] 元素选择器就是通过元素名来查询元素 $("elementName")这里就可以通过元素名来获取jquery元素了. 但与id选择器不同的是,名称相同的元素有很多,所以获取 ...

  7. Codevs 2370 小机房的树

    2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为 ...

  8. Codevs 1183 泥泞的道路

    1183 泥泞的道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路 ...

  9. C语言程序设计概述

    1 概论 1972年Dennis Ritchie发明了C语言,而后Dennis Ritchie又使用C语言重写了Unix系统,自那以后C语言逐渐受到了全世界大多数编程爱好者的喜爱,后期的主流操作系统L ...

  10. Docker命令使用详解

    其中<>括起来的参数为必选, []括起来为可选 docker -exec -i -t 3f407013d8c0 /bin/bash    进入容器 docker version查看dock ...