天天看點

android listview item定義不同的樣式布局

現在以一個Demo為模型,展現如圖-1的所示的背景内容,分析Listview的相關使用方法。

android listview item定義不同的樣式布局

圖-1 天氣清單顯示的demo

實作思路:定義Listview不同的背景,首先要定義好标題與表格内容的兩個不同的xml布局檔案(city_item.xml,content_item.xml)。在填充資料的時候往往采用構造一個Adapter資料類型,根據構造的資料類型,判斷不同的資料類型,采用LayoutInflater類填充不同的layout檔案,進而傳回不同的View。

LayoutInflater使用方法:

view plain copy to clipboard print ?

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

構造WeatherAdapter類繼承BaseAdapter并實作相關的接口函數,實作對清單資料的填充。其中資料的結構比較關鍵,可以控制相關的标題和内容的關系。

ListViewActivity類則主要是實作并填充相應的資料,顯示相關資料。

程式代碼如下:

1.WeatherAdapter.java

view plain copy to clipboard print ?

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

2.ListViewActivity.java

view plain copy to clipboard print ?

  1. package com.test.main;  
  2. import java.util.ArrayList;  
  3. import java.util.HashMap;  
  4. import android.app.Activity;  
  5. import android.os.Bundle;  
  6. import android.widget.ListView;  
  7. public class ListViewActivity extends Activity {  
  8. @Override  
  9. public void onCreate(Bundle savedInstanceState) {  
  10. super.onCreate(savedInstanceState);  
  11. setContentView(R.layout.main);  
  12. ListView list=(ListView) findViewById(R.id.list_items);  
  13. ArrayList<HashMap<String, String>> listItem = new  
  14. ArrayList<HashMap<String, String>>();  
  15. //各個城市的天氣  
  16. String []data={"北京","今天,晴天,22℃,2011-6-28","明天,多雲轉陣雨,32~23℃,2011-6-29","後天,陰轉多雲,33~23℃,2011-6-30",  
  17. "上海","今天,陣雨轉西北雨,31~25℃,2011-6-28","明天,西北雨轉陰,31~26℃,2011-6-29","後天,陣雨轉多雲,32~27℃,2011-6-30",  
  18. "廣州","今天,中雨轉暴雨,32~25℃,2011-6-28","明天,暴雨轉大到暴雨,29~25℃,2011-6-29","後天,暴雨轉陣雨,29~25℃,2011-6-30",  
  19. "深圳","今天,中雨轉暴雨,31~25℃,2011-6-28","明天,暴雨,29~24℃,2011-6-29","後天,大雨轉陣雨,28~25℃,2011-6-30"};  
  20. //可以是城市的類型判斷或者第幾天判斷,根據不同的需求構造不同的數組結構适應不同的應用  
  21. int []type={0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3};  
  22. int size=data.length;  
  23. for(int i=0;i<size;i++){  
  24. HashMap<String, String> map = new HashMap<String, String>();  
  25. //根據不同需求可以構造更複雜的資料,目前之構造一個資料  
  26. map.put("data", data[i]);  
  27. listItem.add(map);  
  28. }  
  29. WeatherAdapter listItemAdapter= new WeatherAdapter(this, listItem,type);  
  30. list.setAdapter(listItemAdapter);  
  31. }  
  32. }  

三個xml布局檔案:

3.city_item.xml

view plain copy to clipboard print ?

  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. <TextView  
  21. android:layout_height="wrap_content"  
  22. android:textSize="18dip"  
  23. android:layout_width="fill_parent"  
  24. android:id="@+id/city"  
  25. android:paddingTop="6dip"  
  26. android:textColor="@color/black"  
  27. />  
  28. </RelativeLayout>  

4.content_item.xml

view plain copy to clipboard print ?

  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

view plain copy to clipboard print ?

  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