Android ListView中 每一项都有不同的布局

Android ListView给每个Item显示不同颜色的字体 今天做项目中,要求根据不同的内容,给listview里面的textview显示不同的颜色。 网上百度了一下,大多数是讲点击Item时,改变Item的背景颜色。 重写SimpleAdapter的getview方法即可。 公司要求项目保密,不能把完整代码贴出来。把大致方法贴出来,我懒得再整理了,有不明白的留言,我会尽自己所能给大家讲明白。 int lengh = mListTitl 阅读详情

先前我写的一篇 每一项都有不同布局的 博客,那种方法并不常用,这里的方法是最常用的方法。

实现代码

Adapter的代码

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

TYPE_1...是三种类型.

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

[java]  view plain copy
  1. class RunRankAdapter extends BaseAdapter {  
  2.     ArrayList<HashMap<String, Object>> ls;  
  3.     Context mContext;  
  4.     LinearLayout linearLayout = null;  
  5.     LayoutInflater inflater;  
  6.     TextView tex;  
  7.     final int VIEW_TYPE = 3;  
  8.     final int TYPE_1 = 0;  
  9.     final int TYPE_2 = 1;  
  10.     final int TYPE_3 = 2;  
  11.   
  12.     public RunRankAdapter(Context context,  
  13.             ArrayList<HashMap<String, Object>> list) {  
  14.         ls = list;  
  15.         mContext = context;  
  16.     }  
  17.   
  18.     @Override  
  19.     public int getCount() {  
  20.         return ls.size();  
  21.     }  
  22.   
  23.     @Override  
  24.     public Object getItem(int position) {  
  25.         return ls.get(position);  
  26.     }  
  27.   
  28.     @Override  
  29.     public long getItemId(int position) {  
  30.         return 0;  
  31.     }  
  32.   
  33.     // 每个convert view都会调用此方法,获得当前所需要的view样式  
  34.     @Override  
  35.     public int getItemViewType(int position) {  
  36.         int p = position;  
  37.         if (p == 0)  
  38.             return TYPE_1;  
  39.         else if (p == 1)  
  40.             return TYPE_2;  
  41.         else  
  42.             return TYPE_3;  
  43.     }  
  44.   
  45.     @Override  
  46.     public int getViewTypeCount() {  
  47.         return 3;  
  48.     }  
  49.   
  50.     @Override  
  51.     public View getView(int position, View convertView, ViewGroup parent) {  
  52.         ViewHolder1 holder1 = null;  
  53.         ViewHolder2 holder2 = null;  
  54.         ViewHolder3 holder3 = null;  
  55.         int type = getItemViewType(position);  
  56.         if (convertView == null) {  
  57.             inflater = LayoutInflater.from(mContext);  
  58.             // 按当前所需的样式,确定new的布局  
  59.             switch (type) {  
  60.             case TYPE_1:  
  61.   
  62.                 convertView = inflater.inflate(R.layout.item_runrank1,  
  63.                         parent, false);  
  64.                 holder1 = new ViewHolder1();  
  65.                 holder1.rank1 = (TextView) convertView  
  66.                         .findViewById(R.id.tv_list1_rank);  
  67.                 holder1.time1 = (TextView) convertView  
  68.                         .findViewById(R.id.tv_list1_time);  
  69.                 convertView.setTag(holder1);  
  70.                 break;  
  71.             case TYPE_2:  
  72.                 convertView = inflater.inflate(R.layout.item_runrank2,  
  73.                         parent, false);  
  74.                 holder2 = new ViewHolder2();  
  75.                 holder2.rank2 = (TextView) convertView  
  76.                         .findViewById(R.id.tv_list2_rank);  
  77.                 holder2.time2 = (TextView) convertView  
  78.                         .findViewById(R.id.tv_list2_time);  
  79.                 convertView.setTag(holder2);  
  80.                 break;  
  81.             case TYPE_3:  
  82.                 convertView = inflater.inflate(R.layout.item_runrank3,  
  83.                         parent, false);  
  84.                 holder3 = new ViewHolder3();  
  85.                 holder3.rank3 = (TextView) convertView  
  86.                         .findViewById(R.id.tv_list3_rank);  
  87.                 holder3.time3 = (TextView) convertView  
  88.                         .findViewById(R.id.tv_list3_time);  
  89.                 convertView.setTag(holder3);  
  90.                 break;  
  91.             default:  
  92.                 break;  
  93.             }  
  94.   
  95.         } else {  
  96.             switch (type) {  
  97.             case TYPE_1:  
  98.                 holder1 = (ViewHolder1) convertView.getTag();  
  99.                 break;  
  100.             case TYPE_2:  
  101.                 holder2 = (ViewHolder2) convertView.getTag();  
  102.                 break;  
  103.             case TYPE_3:  
  104.                 holder3 = (ViewHolder3) convertView.getTag();  
  105.                 break;  
  106.             }  
  107.         }  
  108.         // 设置资源  
  109.         switch (type) {  
  110.         case TYPE_1:  
  111.             holder1.rank1.setText("" + (position + 1));  
  112.             holder1.time1.setText(ls.get(position).get("time").toString());  
  113.             break;  
  114.         case TYPE_2:  
  115.             holder2.rank2.setText("" + (position + 1));  
  116.             holder2.time2.setText(ls.get(position).get("time").toString());  
  117.             holder2.totaldistance2.setText(ls.get(position)  
  118.             break;  
  119.         case TYPE_3:  
  120.             holder3.rank3.setText("" + (position + 1));  
  121.             holder3.time3.setText(ls.get(position).get("time").toString());  
  122.             break;  
  123.         }  
  124.   
  125.         return convertView;  
  126.     }  
  127.   
  128.     public class ViewHolder1 {  
  129.         TextView rank1;  
  130.         TextView time1;  
  131.     }  
  132.   
  133.     public class ViewHolder2 {  
  134.         TextView rank2;  
  135.         TextView time2;  
  136.     }  
  137.   
  138.     public class ViewHolder3 {  
  139.         TextView rank3;  
  140.         TextView time3;  
  141.     }  
  142. }  

使用方式:

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

[java]  view plain copy
  1. private RunRankAdapter runRankAdapter;    
  2. ArrayList<HashMap<String, Object>> runRank;    
  3. ListView lv_runRank;  
  4. runRank = new ArrayList<HashMap<String, Object>>();    
  5. runRankAdapter = new RunRankAdapter(this, runRank);    
  6. lv_runRank = (ListView) findViewById(R.id.lv_runRank);    
  7. lv_runRank.setAdapter(runRankAdapter);  


还有一种方法:

在主布局文件中包含一个LinearLayout. 并且设置android:orientation="vertical"
定义两种不同的布局文件,然后代码中,根据不同条件调用.addview向LinearLayout加载就可以了

转自:http://blog.youkuaiyun.com/lllkey/article/details/9093107

Android中ListView使用getItemViewType为item设置不同的布局 实际开发过程中,有一处需要显示一个交易记录的列表,这个列表很容易让人联想到用listview来实现,但是这个列表又有稍许不同的地方,那就是它里面的item并不是一样的布局,其中某些部分显示的是消费的记录,而有些地方显示的是充值的记录,也就对应了不同的item布局。而且,这两处地方都是从服务端获取数据的,这两个item的数据对应的类内容也各不相同,该怎么处理呢?下面来一步步实现这个效果,先看效果图: 阅读详情

相关推荐

Android ListView使用不同对象加载不同布局

因为未知原因,突然想到了关于一个 List 集合里面能否添加不同对象的问题,因为我们平时开发过程中,关于List 的比较常规的写法就是:List<XXX> list = new ArrayList<XXX>();这让我形成了一种 List 里面就只能添加一种类型的对象的潜在想法(或许是 Java 基础不够扎实)。 所以,我这里用代码确定一下,List 不给定泛型,然后迭代添加两种不同的对象,最后再

发强 4786

Android 自定义ListView中的Item样式

荒废许久的Android开发现在又重新开刀干了,发现还是很有激情坐下去的,也希望毕业之后找一份Android开发的工作吧,用博客来记录一下自己掉过的坑,这些东西不用的话,没过多久就会忘记,这不,又倒回来看ListView,揪心,以后就可以看自己博客了,就不用再百度了,啊哈哈哈哈。先说点其它的,最近试了试Git出的编辑器Atom,跟我之前超爱的sublime长得挺像的,不过刚下好久能带文件管理,可以直

我就随便写写 1万+

电路抗干扰原理及应用(1)

电路抗干扰原理——介绍干扰源、干扰途径、抗干扰技术(接地技术)

qq_34758408的博客 2065

安卓 Adapter 使用详解

Adapter是用来帮助填充数据的中间桥梁,比如通过它将数据填充到ListView, GridView, Gallery.而android 提供了几种Adapter:ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter,

dahuzi的专栏 1996

华为2288H-V5服务器做raid的详细步骤

操作步骤 服务器启动界面 按del键进入设置输入密码,2288H-v5默认密码是Admin@9000 移动光标选择device manager 驱动管理选择configurationutility 配置管理 选择main menu 主菜单 选择第一个 configuration management 配置管理 选择create virtual driver 创建虚拟驱动选择select RAID level 选择RAID等级选择level-5 选择select drivers 选择驱......

weixin_46041124的博客 1万+

达梦数据库(DM)的备份与恢复功能

本文系统介绍了达梦数据库(DM)的备份与恢复功能,主要包括作业系统和物理/逻辑备份还原两大模块。作业系统部分详细说明了通过代理环境创建定时备份和删除备份作业的步骤;物理备份还原部分阐述了联机和脱机备份方式,包括数据库、表空间、表和归档的备份还原操作;逻辑备份还原部分介绍了dexp/dimp工具的使用方法及四种级别的导入导出功能。文章还介绍了图形化管理工具进行备份还原的操作流程,全面覆盖了达梦数据库的数据保护方案,为数据库管理员提供了详细的技术指导。

weixin_48812832的博客 1211

Android应用之——利用getItemViewType为Listview的item设置不同的布局

利用getItemViewType方法为listview的item设置不同的布局文件

Micheal_Yang's Blog 3996

C#上位机开发实战全流程:从需求到落地,避坑指南+完整代码

作为一名做了5年工业自动化上位机开发的程序员,我踩过的坑比写过的代码还多——从最初串口通信粘包导致数据错乱,到可视化图表卡顿卡死,再到现场异常崩溃无日志可查,每一次踩坑都是一次血泪教训。今天这篇文章,我会把C#上位机开发的全流程拆解开,从需求分析到通信模块、数据可视化,再到异常处理,每个环节都结合工业实际场景,分享真实项目中能用的方案、完整代码和避坑技巧。不管你是刚入门的新手,还是想优化现有项目的老司机,相信都能有所收获。很多新手做上位机开发,一上来就闷头写代码,最后发现做出来的东西不符合现场需求——比如客

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 996

Android_ListView 用多样式item实现复杂布局显示

类似上面两张的布局,可以一个一个添加至布局,也可以分别使用ListView,也可以用同一个ListView,用多个item填充。即将所有的item分类,分成几种item。重点是写ListView的适配器Adapter。 用ListView完成复杂布局的流程如下图所示: 接下来,将通过一个详细的例子说明,在聊天工程中的设置页面,页面运行时的页面如下图所示: 页面布局代码如下:<?xml

iliupp的博客 3581

无人机导航中的坐标系统详解与转换实现

本文系统介绍了无人机导航中常用的坐标系及其转换方法。主要内容包括:1) 四种关键坐标系(大地坐标系ECEF、经纬度LLA、北东天坐标系NED、机体坐标系)的定义和特点;2) 坐标系间的转换原理与实现,重点讲解LLA与ECEF的互转公式及ECEF与NED的转换方法;3) 提供可直接使用的C++实现代码,包括基于WGS84椭球模型的精确转换算法。这些内容为无人机导航系统开发提供了实用的坐标系处理方案,能够有效解决多源数据在不同坐标系下的统一表示问题。

电脑管家 379

《SOC架构-ARM架构-文档导读》-目录

小白请看“Armv8/Armv9架构从入门到精通”专栏。以翻译为主的,深度深度深度深度/深入深入深入 学习ARM架构的文章。

baron-周贺贺-代码改变世界ctw 2085

android listview 不同item布局,Android Listview中显示不同的视图布局详解及实例代码...

Android Listview中显示不同的视图布局1. 使用场景在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能。convertView在Item为单一的同种类型布局时,能够回收并重用,但是多个Item布局类型不同时,convertView的回收和重用会出现问题。比如有些行为纯文本,有些行则是图文混排,这里纯文本行为一类布...

weixin_39587010的博客 346

2026年紫光同创数字IC笔试试卷带答案

FPGA基础知识与设计要点摘要 本文围绕FPGA与数字IC设计核心概念,通过单选题、波形分析题、多选题和简答题形式,系统梳理了以下关键知识点: FPGA基础架构 查找表(LUT)是实现组合逻辑的基本单元(题1) CLB包含LUT、触发器和进位链,后者加速算术运算(题6,10) 布局布线优化是减少关键路径延迟的核心方法(题7) 时序分析要点 建立时间(时钟沿前数据需稳定)与保持时间(时钟沿后需保持)的定义(题2,简答1) 亚稳态成因及两级同步器处理跨时钟域信号的方法(多选题1,波形题5) 特殊设计技术 异步复

Open 114

Android ListView item 不同布局实现

最重要的是在BaseAdapter里的getItemViewType();(为什么还待考虑) 直接上代码 public class ListAdapter extends BaseAdapter { private Context mContext; private static final int VIEWTYPTOP = 0; private static final ...

aqj1234的博客 137

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android ListView显示不同布局Item

Android ListView显示不同布局ItemListView显示不同item布局在一些场合还是比较常用的,譬如 新闻客户端中,用的灰常多。该demo使用xUtils框架,用于请求网络,和加载图片。效果图: 图片数据是从服务器获取listview.json{ "code": 200, "result": [ { "imageUrl":

Star的博客 8174

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android listview 显示不同布局

ListView在android系统中是一个非常强大的控件,你在90%的android应用上都能看到它的身影。listview除了能够显示统一的样式之外,还可以在不同行显示不同的样式(不同的布局)。实现显示不同的布局其实很简单,我们要做的就是重写一个BaseAdapter。在我们自己的的Adapter里我们需要重写的方法如下:       public int getViewTypeCount(

liuhanhan512的专栏 2015

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android ListView中不同样式的布局

在平时android开发当中,我们经常会碰到这样一个需求,在一段listView中差一段不一样的布局,那么这种listView我们应该怎么做呢 其实在BaseAdapter这个适配器中我们需要注意两个方法就可以简单的实现下面这种插入不同布局的效果 接下来我们就来认识这两个方法 下一步在getView中编写加载两种不同布局的逻辑数据 ...

jeekmary的博客 2008

android 复杂条目布局,android中listview的item显示不同的布局

android开发中,listview的item中显示不同的布局,即每一个item中的布局是不一样的。1、继承BaseAdapter类,除了其他一些必须重现的方法之外,还需要重写getViewTypeCount和getItemViewType这两个方法。其中getViewTypeCount方法返回listview中的布局个数,getItemViewType方法返回每一个item中布局的标志。最后在...

weixin_39796868的博客 363

android中listview的item显示不同的布局

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34290631的博客 263

android listview item定义不同的样式布局

android listview item定义不同的样式布局 Android Listview 是常用的数据展现控件,往往用于显示列表形式的数据。如果仅仅显示数据往往会显得很单调,很多时候根据需要定义不同的item 背景选项,例如定义数据的标题,表头或者间隔显示Listview item背景内容。 现在以一个Demo为模型,展现如图-1的所示的背景内容,分析Listview的相关使用方法。

ShyBoyes的专栏 1802

android 关于listview中不同item的布局

上次我写了一篇关于自定义的HorizontalScrollView和viewpager类似tab的滑动,截图下面有listview的不同的item布局,就是在getview方法里选择type类型。如图:,其实也挺简单的,我在这里只贴出重要的方法。 先定义个listview控件,一目了然这里要分为2部分。先写一个类实现Serializable接口,定义一个关于title的属性,和一个包裹里面的内容

悟-静的博客 899

android listview 两种布局,android listview显示不同的布局(其中需要注意的问题)

直接贴代码//这个接口是用来标志类型的publicinterfaceIType{publicstaticfinalintTYPE_1=0;publicstaticfinalintTYPE_2=1;publicintgetType();}//类型1的modelpublicclassType1implementsIType{privateStringte...

weixin_32328999的博客 398

在android中listview布局,android开发-Listview中显示不同的视图布局

1.使用场景在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能。convertView在Item为单一的同种类型布局时,能够回收并重用,但是多个Item布局类型不同时,convertView的回收和重用会出现问题。比如有些行为纯文本,有些行则是图文混排,这里纯文本行为一类布局,图文混排的行为第二类布局。单一类型的ListVie...

weixin_42783709的博客 304
上一篇: eclipse保存时自动去除tab的问题(光标自动到最前面)
下一篇: 一个非常好的Android开发学习博客
HabbyGe
博客等级 码龄16年 46粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值