在Android的Listview中显示多种视图


1.场景

在使用ListView时,我们经常遇到需要在一个ListView中显示多种视图的场景,例如:聊天软件的聊天界面中,自己发送的消息在左边显示自己的头像,别人发送的消息在右边显示别人的头像,等等。

2.ListView常用方式

2.1 ListView常用的Adapter有:ArrayAdapter,SimpleAdapter,CursorAdapter。在Android sdk sample的ApiDemo工程中有详细的使用方法。

2.2 当我们需要在ListView的视图中展示复杂的数据和资源,处理复杂的事件时,我们可以继承BaseAdapter,重写BaseAdapter中的方法来达到目的,主要是getView(int position, View convertView, ViewGroup parent)方法。在android sdk sample的ApiDemo工程中有详细的使用方法。

2.3 当我们需要在ListView中显示多种视图时,仍然使用继承BaseAdapter的方式,要注意的是getItemViewType(int position)和getViewTypeCount()这两个方法。

3.ListView中显示多种视图的实现方式

3.1 实现步骤

3.1.1 定义试图类型常量

相关源码下载在帮客之家的1号FTP服务器里,下载地址:

FTP地址:ftp://www.bkjia.com

用户名:www.bkjia.com

密码:www.muu.cc

在 2011年LinuxIDC.com\10月\10月\在Android的Listview中显示多种视图

下载方法见 http://www.bkjia.net/thread-1187-1-1.html

我们定义了三种:

  1. /** 
  2.  * 发送的消息 
  3.  */  
  4. private static final int TYPE_SEND = 0;  
  5. /** 
  6.  * 收到的消息 
  7.  */  
  8. private static final int TYPE_RECEIVE = TYPE_SEND + 1;  
  9. /** 
  10.  * 图片 
  11.  */  
  12. private static final int TYPE_PIC = TYPE_RECEIVE + 1;  
3.1.2 重写getItemViewType(int position)和getViewTypeCount()方法
 
  1. public int getItemViewType(int position) {  
  2.     int type = super.getItemViewType(position);  
  3.     try  
  4.     {  
  5.         type = Integer.parseInt(data.get(position).get("type"));  
  6.     } catch (Exception e)  
  7.     {  
  8.         e.printStackTrace();  
  9.     }  
  10.     System.out.println("getItemViewType::" + position + " is " + type);  
  11.     return type;  
  12. }  
  13.   
  14. public int getViewTypeCount() {  
  15.     System.out.println("getViewTypeCount is " + 3);  
  16.     return 3;  
  17. }  

由getItemViewType返回对应项的自定义视图类型,getViewTypeCount返回视图类型总数。
注意:getViewTypeCount返回的值必须比视图类型常量值大,以数组来比喻的话,getViewTypeCount返回的是数组的长度,getItemViewType返回的(即3.1.1中定义的常量)就是数组的下标。

  • 1
  • 2
  • 下一页

相关内容