Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android樣式布局---)ListView(附上源碼)

android樣式布局---)ListView(附上源碼)

編輯:關於Android編程

在android應用開發過程中,Listview 是常用的數據展現控件,往往用於顯示列表形式的數據。如果僅僅顯示數據往往會顯得很單調,很多時候根據需要定義不同的item 背景選項,例如定義數據的標題,表頭或者間隔顯示Listview item背景內容。

如圖的所示的背景內容,現在以一個WeatherDemo為模型分析Listview的相關使用方法。

\

實現思路:定義Listview不同的背景,首先要定義好標題與表格內容的兩個不同的xml布局文件(city_item.xml,content_item.xml)。在填充數據的時候往往采用構造一個Adapter數據類型,根據構造的數據類型,判斷不同的數據類型,采用LayoutInflater類填充不同的layout文件,從而返回不同的View。

構造WeatherAdapter類繼承BaseAdapter並實現相關的接口函數,實現對列表數據的填充。其中數據的結構比較關鍵,可以控制相關的標題和內容的關系。

WeatherAdapter類則主要是實現並填充相應的數據,顯示相關數據。

程序代碼如下:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CjwvcD4KPHByZSBjbGFzcz0="brush:java;">public class WeatherAdapter extends BaseAdapter { // 數據源 private List> list; private Context context; private int[] type; // 構造函數 public WeatherAdapter(Context context, List> 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; } }
MainActivity.java

public class MainActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ListView list = (ListView) findViewById(R.id.list_items);

		ArrayList> listItem = new ArrayList>();

		// 各個城市的天氣
		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 map = new HashMap();
			// 根據不同需求可以構造更復雜的數據,目前之構造一個數據
			map.put("data", data[i]);
			listItem.add(map);
		}
		WeatherAdapter listItemAdapter = new WeatherAdapter(this, listItem, type);
		list.setAdapter(listItemAdapter);

	}
}


三個xml布局文件:


city_item.xml





    

    


content_item.xml





    

    

main.xml




    
    

源碼下載地址:http://download.csdn.net/detail/yangweixing10/7214057

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved