現在以一個Demo為模型,展現如圖-1的所示的背景内容,分析Listview的相關使用方法。
圖-1 天氣清單顯示的demo
實作思路:定義Listview不同的背景,首先要定義好标題與表格内容的兩個不同的xml布局檔案(city_item.xml,content_item.xml)。在填充資料的時候往往采用構造一個Adapter資料類型,根據構造的資料類型,判斷不同的資料類型,采用LayoutInflater類填充不同的layout檔案,進而傳回不同的View。
LayoutInflater使用方法:
view plain copy to clipboard print ?
- LayoutInflater inflater = LayoutInflater.from(this);
- View view=inflater.inflate(R.layout.ID, null);
構造WeatherAdapter類繼承BaseAdapter并實作相關的接口函數,實作對清單資料的填充。其中資料的結構比較關鍵,可以控制相關的标題和内容的關系。
ListViewActivity類則主要是實作并填充相應的資料,顯示相關資料。
程式代碼如下:
1.WeatherAdapter.java
view plain copy to clipboard print ?
- package com.test.main;
- import java.util.HashMap;
- import java.util.List;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.TextView;
- public class WeatherAdapter extends BaseAdapter{
- //資料源
- private List<HashMap<String,String>> list;
- private Context context;
- private int []type;
- //構造函數
- public WeatherAdapter (Context context,List<HashMap<String,String>> list,
- int[] type){
- this.context = context;
- this.list = list;
- this.type=type;
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return list.size();
- }
- @Override
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return list.get(position);
- }
- @Override
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- LayoutInflater mInflater = LayoutInflater.from(context);
- //産生一個View
- View view = null;
- //根據type不同的資料類型構造不同的View,也可以根據1,2,3天數構造不同的樣式
- if(type[position]==0){
- view = mInflater.inflate(R.layout.city_item, null);
- //擷取城市名稱
- String cityName=list.get(position).get("data");
- ImageView image=(ImageView)view.findViewById(R.id.weather_image);
- if(cityName.equals("北京")){
- image.setImageResource(R.drawable.beijing);
- }else if(cityName.equals("上海")){
- image.setImageResource(R.drawable.shanghai);
- }else if(cityName.equals("廣州")){
- image.setImageResource(R.drawable.guangzhou);
- }else if(cityName.equals("深圳")){
- image.setImageResource(R.drawable.shenzhen);
- }
- TextView city=(TextView)view.findViewById(R.id.city);
- city.setText(cityName);
- }else{
- view = mInflater.inflate(R.layout.content_item, null);
- //擷取資料
- String content=list.get(position).get("data");
- //分離資料
- String []items=content.split(",");
- TextView weather=(TextView)view.findViewById(R.id.content);
- weather.setText(items[0]+"天氣: "+items[1]+";溫度: "+items[2]);
- TextView date=(TextView)view.findViewById(R.id.date);
- date.setText(items[3]);
- }
- return view;
- }
- }
2.ListViewActivity.java
view plain copy to clipboard print ?
- package com.test.main;
- import java.util.ArrayList;
- import java.util.HashMap;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.ListView;
- public class ListViewActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- ListView list=(ListView) findViewById(R.id.list_items);
- ArrayList<HashMap<String, String>> listItem = new
- ArrayList<HashMap<String, String>>();
- //各個城市的天氣
- String []data={"北京","今天,晴天,22℃,2011-6-28","明天,多雲轉陣雨,32~23℃,2011-6-29","後天,陰轉多雲,33~23℃,2011-6-30",
- "上海","今天,陣雨轉西北雨,31~25℃,2011-6-28","明天,西北雨轉陰,31~26℃,2011-6-29","後天,陣雨轉多雲,32~27℃,2011-6-30",
- "廣州","今天,中雨轉暴雨,32~25℃,2011-6-28","明天,暴雨轉大到暴雨,29~25℃,2011-6-29","後天,暴雨轉陣雨,29~25℃,2011-6-30",
- "深圳","今天,中雨轉暴雨,31~25℃,2011-6-28","明天,暴雨,29~24℃,2011-6-29","後天,大雨轉陣雨,28~25℃,2011-6-30"};
- //可以是城市的類型判斷或者第幾天判斷,根據不同的需求構造不同的數組結構适應不同的應用
- int []type={0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3};
- int size=data.length;
- for(int i=0;i<size;i++){
- HashMap<String, String> map = new HashMap<String, String>();
- //根據不同需求可以構造更複雜的資料,目前之構造一個資料
- map.put("data", data[i]);
- listItem.add(map);
- }
- WeatherAdapter listItemAdapter= new WeatherAdapter(this, listItem,type);
- list.setAdapter(listItemAdapter);
- }
- }
三個xml布局檔案:
3.city_item.xml
view plain copy to clipboard print ?
- <?xml version="1.0" encoding="utf-8"?>
- <!-- items選項 -->
- <RelativeLayout
- android:id="@+id/RelativeLayout"
- android:layout_width="fill_parent"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content"
- android:paddingBottom="4dip"
- android:paddingLeft="12dip"
- android:paddingRight="12dip"
- android:background="#9ACD32"
- >
- <ImageView
- android:paddingTop="4dip"
- android:layout_alignParentRight="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/weather_image"
- />
- <TextView
- android:layout_height="wrap_content"
- android:textSize="18dip"
- android:layout_width="fill_parent"
- android:id="@+id/city"
- android:paddingTop="6dip"
- android:textColor="@color/black"
- />
- </RelativeLayout>
4.content_item.xml
view plain copy to clipboard print ?
- <?xml version="1.0" encoding="utf-8"?>
- <!-- items選項 -->
- <RelativeLayout
- android:id="@+id/RelativeLayout02"
- android:layout_width="fill_parent"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content"
- android:paddingBottom="4dip"
- android:paddingLeft="12dip"
- android:paddingRight="12dip"
- android:background="@drawable/listview_bg"
- >
- <ImageView
- android:paddingTop="22dip"
- android:layout_alignParentRight="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/weather_image"
- />
- <TextView
- android:layout_height="wrap_content"
- android:textSize="18dip"
- android:layout_width="fill_parent"
- android:id="@+id/content"
- android:paddingTop="6dip"
- />
- <TextView
- android:text=""
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:layout_below="@+id/content"
- android:id="@+id/date"
- android:paddingRight="20dip"
- />
- </RelativeLayout>
5.main.xml
view plain copy to clipboard print ?
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <ListView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:divider="@color/white"
- android:dividerHeight="1dip"
- android:id="@+id/list_items"
- />
- </LinearLayout>
源碼下載下傳:http://download.csdn.net/detail/caoshichao520326/6392923