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

现在以一个Demo为模型,展现如图-1的所示的背景内容,分析Listview的相关使用方法。

图-1 天气列表显示的demo

实现思路:定义Listview不同的背景,首先要定义好标题与表格内容的两个不同的xml布局文件(city_item.xml,content_item.xml)。在填充数据的时候往往采用构造一个Adapter数据类型,根据构造的数据类型,判断不同的数据类型,采用LayoutInflater类填充不同的layout文件,从而返回不同的View。

LayoutInflater使用方法:

  1. LayoutInflater inflater = LayoutInflater.from(this);  
  2.   
  3. View view=inflater.inflate(R.layout.ID, null);  

构造WeatherAdapter类继承BaseAdapter并实现相关的接口函数,实现对列表数据的填充。其中数据的结构比较关键,可以控制相关的标题和内容的关系。

ListViewActivity类则主要是实现并填充相应的数据,显示相关数据。

程序代码如下:

1.WeatherAdapter.java

  1. package com.test.main;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.List;  
  5.   
  6. import android.content.Context;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.BaseAdapter;  
  11. import android.widget.ImageView;  
  12. import android.widget.TextView;  
  13.   
  14. public class WeatherAdapter extends BaseAdapter{  
  15.   
  16. //数据源  
  17. private List<HashMap<String,String>> list;  
  18. private Context context;  
  19. private int []type;  
  20.   
  21. //构造函数  
  22. public WeatherAdapter (Context context,List<HashMap<String,String>> list,  
  23.  int[] type){  
  24. this.context = context;  
  25. this.list = list;  
  26. this.type=type;  
  27. }  
  28.   
  29. @Override  
  30. public int getCount() {  
  31. // TODO Auto-generated method stub  
  32. return list.size();  
  33. }  
  34.   
  35. @Override  
  36. public Object getItem(int position) {  
  37. // TODO Auto-generated method stub  
  38. return list.get(position);  
  39. }  
  40.   
  41. @Override  
  42. public long getItemId(int position) {  
  43. // TODO Auto-generated method stub  
  44. return position;  
  45. }  
  46.   
  47. @Override  
  48. public View getView(int position, View convertView, ViewGroup parent) {  
  49. // TODO Auto-generated method stub  
  50. LayoutInflater mInflater = LayoutInflater.from(context);  
  51. //产生一个View  
  52. View view = null;  
  53. //根据type不同的数据类型构造不同的View,也可以根据1,2,3天数构造不同的样式  
  54. if(type[position]==0){  
  55. view = mInflater.inflate(R.layout.city_item, null);  
  56. //获取城市名称  
  57. String cityName=list.get(position).get("data");  
  58. ImageView image=(ImageView)view.findViewById(R.id.weather_image);  
  59.   
  60. if(cityName.equals("北京")){  
  61. image.setImageResource(R.drawable.beijing);  
  62. }else if(cityName.equals("上海")){  
  63. image.setImageResource(R.drawable.shanghai);  
  64.   
  65. }else if(cityName.equals("广州")){  
  66. image.setImageResource(R.drawable.guangzhou);  
  67.   
  68. }else if(cityName.equals("深圳")){  
  69. image.setImageResource(R.drawable.shenzhen);  
  70.   
  71. }  
  72. TextView city=(TextView)view.findViewById(R.id.city);  
  73. city.setText(cityName);  
  74. }else{  
  75. view = mInflater.inflate(R.layout.content_item, null);  
  76. //获取数据  
  77. String content=list.get(position).get("data");  
  78. //分离数据  
  79. String []items=content.split(",");  
  80.   
  81. TextView weather=(TextView)view.findViewById(R.id.content);  
  82. weather.setText(items[0]+"天气: "+items[1]+";温度:  "+items[2]);  
  83. TextView date=(TextView)view.findViewById(R.id.date);  
  84. date.setText(items[3]);  
  85.   
  86. }  
  87.   
  88. return view;  
  89. }  
  90.   
  91. }  

2.ListViewActivity.java

  1. package com.test.main;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.widget.ListView;  
  9.   
  10. public class ListViewActivity extends Activity {  
  11. /** Called when the activity is first created. */  
  12. @Override  
  13. public void onCreate(Bundle savedInstanceState) {  
  14. super.onCreate(savedInstanceState);  
  15. setContentView(R.layout.main);  
  16. ListView list=(ListView) findViewById(R.id.list_items);  
  17.   
  18. ArrayList<HashMap<String, String>> listItem = new  
  19. ArrayList<HashMap<String, String>>();  
  20.   
  21. //各个城市的天气  
  22. String []data={"北京","今天,晴天,22℃,2011-6-28","明天,多云转阵雨,32~23℃,2011-6-29","后天,阴转多云,33~23℃,2011-6-30",  
  23. "上海","今天,阵雨转雷阵雨,31~25℃,2011-6-28","明天,雷阵雨转阴,31~26℃,2011-6-29","后天,阵雨转多云,32~27℃,2011-6-30",  
  24. "广州","今天,中雨转暴雨,32~25℃,2011-6-28","明天,暴雨转大到暴雨,29~25℃,2011-6-29","后天,暴雨转阵雨,29~25℃,2011-6-30",  
  25. "深圳","今天,中雨转暴雨,31~25℃,2011-6-28","明天,暴雨,29~24℃,2011-6-29","后天,大雨转阵雨,28~25℃,2011-6-30"};  
  26. //可以是城市的类型判断或者第几天判断,根据不同的需求构造不同的数组结构适应不同的应用  
  27. int []type={0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3};  
  28. int size=data.length;  
  29. for(int i=0;i<size;i++){  
  30. HashMap<String, String> map = new HashMap<String, String>();  
  31. //根据不同需求可以构造更复杂的数据,目前之构造一个数据  
  32. map.put("data", data[i]);  
  33. listItem.add(map);  
  34. }  
  35. WeatherAdapter listItemAdapter= new WeatherAdapter(this, listItem,type);  
  36. list.setAdapter(listItemAdapter);  
  37.   
  38. }  
  39. }  

三个xml布局文件:

3.city_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!--  items选项 -->  
  3. <RelativeLayout  
  4. android:id="@+id/RelativeLayout"  
  5. android:layout_width="fill_parent"  
  6. xmlns:android="http://schemas.android.com/apk/res/android"  
  7. android:layout_height="wrap_content"  
  8. android:paddingBottom="4dip"  
  9. android:paddingLeft="12dip"  
  10. android:paddingRight="12dip"  
  11. android:background="#9ACD32"  
  12. >  
  13. <ImageView  
  14. android:paddingTop="4dip"  
  15. android:layout_alignParentRight="true"  
  16. android:layout_width="wrap_content"  
  17. android:layout_height="wrap_content"  
  18. android:id="@+id/weather_image"  
  19.   
  20. />  
  21. <TextView  
  22. android:layout_height="wrap_content"  
  23. android:textSize="18dip"  
  24. android:layout_width="fill_parent"  
  25. android:id="@+id/city"  
  26. android:paddingTop="6dip"  
  27. android:textColor="@color/black"  
  28. />  
  29.   
  30. </RelativeLayout>  

4.content_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!--  items选项 -->  
  3. <RelativeLayout  
  4. android:id="@+id/RelativeLayout02"  
  5. android:layout_width="fill_parent"  
  6. xmlns:android="http://schemas.android.com/apk/res/android"  
  7. android:layout_height="wrap_content"  
  8. android:paddingBottom="4dip"  
  9. android:paddingLeft="12dip"  
  10. android:paddingRight="12dip"  
  11. android:background="@drawable/listview_bg"  
  12. >  
  13. <ImageView  
  14. android:paddingTop="22dip"  
  15. android:layout_alignParentRight="true"  
  16. android:layout_width="wrap_content"  
  17. android:layout_height="wrap_content"  
  18. android:id="@+id/weather_image"  
  19. />  
  20. <TextView  
  21. android:layout_height="wrap_content"  
  22. android:textSize="18dip"  
  23. android:layout_width="fill_parent"  
  24. android:id="@+id/content"  
  25. android:paddingTop="6dip"  
  26. />  
  27. <TextView  
  28. android:text=""  
  29. android:layout_height="wrap_content"  
  30. android:layout_width="fill_parent"  
  31. android:layout_below="@+id/content"  
  32. android:id="@+id/date"  
  33. android:paddingRight="20dip"  
  34. />  
  35. </RelativeLayout>  

5.main.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3. android:orientation="vertical"  
  4. android:layout_width="fill_parent"  
  5. android:layout_height="fill_parent"  
  6. >  
  7. <ListView android:layout_width="wrap_content"  
  8. android:layout_height="wrap_content"  
  9. android:divider="@color/white"  
  10. android:dividerHeight="1dip"  
  11. android:id="@+id/list_items"  
  12. />  
  13. </LinearLayout>  

源码下载:http://download.csdn.net/detail/caoshichao520326/6392923


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值