標籤:
在android應用開發過程中,Listview 是經常使用的資料展現控制項,往往用於顯示列表形式的資料。
假設只顯示資料往往會顯得非常單調。非常多時候依據須要定義不同的item 背景選項。比如定義資料的標題。表頭或者間隔顯示Listview item背景內容。
的所看到的的背景內容,如今以一個WeatherDemo為模型分析Listview的相關用法。
實現思路:定義Listview不同的背景,首先要定義好標題與表格內容的兩個不同的xml布局檔案(city_item.xml,content_item.xml)。
在填充資料的時候往往採用構造一個Adapter資料類型,依據構造的資料類型,推斷不同的資料類型,採用LayoutInflater類填充不同的layout檔案,從而返回不同的View。
構造WeatherAdapter類繼承BaseAdapter並實現相關的介面函數,實現對列表資料的填充。
當中資料的結構比較關鍵,能夠控制相關的標題和內容的關係。
WeatherAdapter類則主要是實現並填充對應的資料。顯示相關資料。
程式碼例如以下:
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;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubLayoutInflater mInflater = LayoutInflater.from(context);// 產生一個ViewView 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;}}
MainActivity.java
public class MainActivity extends Activity {@Overridepublic 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℃,2014-4-18","明天,多雲轉陣雨,32~23℃,2014-4-19", "後天,陰轉多雲,33~23℃,2014-4-20", "上海","今天,陣雨轉雷陣雨,31~25℃,2014-4-18", "明天,雷陣雨轉陰,31~24℃,2014-4-19","後天,陣雨轉多雲,32~27℃,2014-4-20", "北京", "今天,中雨轉暴雨,32~25℃,2014-4-18","明天,暴雨轉大到暴雨,29~25℃,2014-4-19", "後天,暴雨轉陣雨,29~25℃,2014-4-20","深圳", "今天,中雨轉暴雨,31~25℃,2014-4-18", "明天,暴雨,29~24℃,2014-4-19","後天,大雨轉陣雨,28~25℃,2014-4-20" };// 能夠是城市的類型推斷或者第幾天推斷,依據不同的需求構造不同的數組結構適應不同的應用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布局檔案:
city_item.xml
<?xml version="1.0" encoding="utf-8"?><!-- items選項 --><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#9ACD32" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip" > <ImageView android:id="@+id/weather_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingTop="4dip" android:contentDescription="@string/weather_image"/> <TextView android:id="@+id/city" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="6dip" android:textColor="@color/black" android:textSize="18sp"/></RelativeLayout>
content_item.xml
<?xml version="1.0" encoding="utf-8"?><!-- items選項 --><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/white" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip" ><!-- 能夠刪除 <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingTop="22dip" android:contentDescription="@string/image" /> --> <TextView android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="6dip" android:textSize="15sp"/> <TextView android:id="@+id/date" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/content" android:paddingRight="20dip"/></RelativeLayout>
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/list_items" android:layout_width="wrap_content" android:layout_height="wrap_content" android:divider="@color/white" android:dividerHeight="1dip" > </ListView></LinearLayout>
原始碼:http://download.csdn.net/detail/yangweixing10/7214057
android樣式布局--->ListView(附上原始碼)