Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 從零開始學android(ListView數據列表顯示組件.二十一.)

從零開始學android(ListView數據列表顯示組件.二十一.)

編輯:關於Android編程

與滾動視圖(ScrollView)類似的還有一種列表組件(ListView),可以將多個組件加入到ListView之中以達到組件的滾動顯示效果,ListView組件本身也有對應的ListView類支持,可以通過操作ListView類以完成對此組組件的操作,ListView類的繼承結構如下所示: java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.AdapterView ? android.widget.AbsListView ? android.widget.ListView public ListView(Context context) 構造 創建ListView類的實例化對象 public void setAdapter(ListAdapter adapter) 普通 設置顯示的數據 public ListAdapter getAdapter() 普通 返回ListAdapter public void setOnItemSelectedListener (AdapterView.OnItemSelectedListener listener) 普通 當選項選中時觸發此事件 要進行ListView數據的顯示就必須使用一個Adapter數據的容器來存儲和管理數據 Known Indirect Subclasses(已知的子類) ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter,SpinnerAdapter, WrapperListAdapter 我們比較常用的是 ArrayAdapter,BaseAdapter和simpleAdapter 今天我們就來學習下這幾種adapter與listView的使用

首先來看下ArrayAdapter 他支持一下集中構造方法 ArrayAdapter(context, textViewResourceId) 傳入一個上下文對象,顯示方式
ArrayAdapter(context, resource, textViewResourceId)傳入一個上下文對象,資源ID,顯示方式 ArrayAdapter(context, textViewResourceId, objects)傳入一個上下文對象,顯示格式,和顯示數據(可以為object數組或者object 集合)
ArrayAdapter(context, resource, textViewResourceId, objects)傳入一個上下文對象,資源ID,顯示格式,和顯示數據(可以為object數組或者object 集合)


下面使用前面做過的列子類進行一下簡單的講解 XMl文件


    



JAVA文件
package com.example.listview;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private ListView listView;
	private final String data[] = { "昵稱:風飛雪未揚", "性別:男", "年齡:22歲", "學校:河南大學",
			"系別 :教育科學學院", "郵箱:[email protected]" };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_main);
		listView = (ListView)this.findViewById(R.id.listview);
		listView.setAdapter(new ArrayAdapter(MainActivity.this,
				android.R.layout.simple_list_item_1, data));
		listView.setOnItemClickListener(new OnItemClickListener() {
			
			@Override
			public void onItemClick(AdapterView parents, View view, int position,
					long id) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "您選擇了"+data[position], Toast.LENGTH_SHORT).show();
			}
		});
		

	}

}

顯示效果 \






下面來介紹下SimpleAdapter的使用
使用simpleAdapter來實現帶標題的LIstVIew效果
構造方法如下:
SimpleAdapter (Context context, List> data, int resource, String[] from, int[] to)

基本的使用方法會在代碼中給大家於詳細的注釋 Xml文件的配置


    

    


JAVA文件
package com.example.listview2;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;


public class MainActivity extends Activity {
	private final String Title[] = { "昵稱:", "性別:", "年齡:", "學校:", "系別 :", "郵箱:" };// 標題數據
	private final String contents[] = { "風飛雪未揚", "男", "22歲", "河南大學", "教育科學學院",// 內容數據
			"[email protected]" };
	private ListView listView = null;
	ArrayList> list = null;


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_main);
		listView = (ListView) this.findViewById(R.id.listview);
		list = new ArrayList>();// 實例化list
		for (int i = 0; i < Title.length; i++) {// for循環向list中增加數據
			Map map = new HashMap();// 創建map對象
			map.put("title", Title[i]);
			map.put("content", contents[i]);
			list.add(map);// 將map數據增加到list中去
		}
		// 為ListView設置adapter
		listView.setAdapter(new SimpleAdapter(MainActivity.this, // 上下文對象
				list,// List數據
				android.R.layout.simple_list_item_2,// ListView中數據的顯示方式
				new String[] { "title", "content" },// 此處的String數據必須與List當中的key值對應
				new int[] { android.R.id.text1, android.R.id.text2 }));// android.R.layout.simple_list_item_2中提供的文本控件
		// android. R.id.text1,android. R.id.text2 這兩個屬性是由
		// android.R.layout.simple_list_item_2這個系統布局提供的,大家可以嘗試裡面其他控件的使用
//		為listView中的數據項設置單擊事件
		listView.setOnItemClickListener(new OnItemClickListener() {


			@Override
			public void onItemClick(AdapterView parent, View view,
					int psition, long id) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "您選擇了" +Title[psition]+ contents[psition],
						Toast.LENGTH_SHORT).show();//土司提示
			}
		});


	}


}
效果圖:
\
上面使用的是android自帶的顯示效果,用戶也可以根據自己的需要定制合適的顯示效果 下面我們通過自定義的Layout實現圖文混排的效果
\
xml文件



    


    



自定義xml文件



    

    

    




JAVA文件配置
package com.example.lsitview3;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {

	private final String Title[] = { "昵稱:", "性別:", "年齡:", "學校:", "系別 :", "郵箱:" };// 標題數據
	private final String contents[] = { "風飛雪未揚", "男", "22歲", "河南大學", "教育科學學院",// 內容數據
			"[email protected]" };
	private ListView listView = null;
	private int image[] = { R.drawable.a1, R.drawable.a2, R.drawable.a3,
			R.drawable.a4, R.drawable.a5, R.drawable.a6 };// 設置圖片數據
	ArrayList> list = null;// 將第二個參數設置為Object 便於接收其他類型的參數

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_main);
		listView = (ListView) this.findViewById(R.id.listView1);
		list = new ArrayList>();// 實例化list
		for (int i = 0; i < Title.length; i++) {// for循環向list中增加數據
			Map map = new HashMap();// 創建map對象
			map.put("image", image[i]);
			map.put("title", Title[i]);
			map.put("content", contents[i]);
			list.add(map);// 將map數據增加到list中去
		}
		// 為ListView設置adapter
		listView.setAdapter(new SimpleAdapter(MainActivity.this, // 上下文對象
				list,// List數據
				R.layout.custom,// ListView中數據的顯示方式
				new String[] { "image","title", "content" },// 此處的String數據必須與List當中的key值對應
				new int[] { R.id.imageView1, R.id.textView1,R.id.textView2 }));// 自定義布局的控件id
		// 為listView中的數據項設置單擊事件
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView parent, View view,
					int psition, long id) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this,
						"您選擇了" + Title[psition] + contents[psition],
						Toast.LENGTH_SHORT).show();// 土司提示
			}
		});
	}

}

最終效果
\



BaseAdapter的使用
Known Direct Subclasses(已知子類)
ArrayAdapter, CursZ喎?/kf/ware/vc/" target="_blank" class="keylink">vckFkYXB0ZXIsIFNpbXBsZUFkYXB0ZXKjrEFycmF5QWRhcHRlcjxUPjxicj4KCtPJvMyz0LnYz7W/ybz7U2ltcGxlQWRhcHRlcqOsQXJyYXlBZGFwdGVyPFQ+trzKx0Jhc2VBZGFwdGVytcTX08DgCjxicj4KCsq508NCYXNlQWRhcHRlcr/J0tTH4cvJyrXP1rbUyv2+3bXEz9TKvrLZ1/e6zbbUyv2+3cbky/vM2NX3tcTJ6NbDo6y908/CwLS1xMHQ19PO0sPHvtbNqLn9QmFzZUFkYXB0ZXLAtMno1sNpdGVttcSxs76w0dXJqwo8YnI+Cgq94bm5CjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140817/2014081709342167.png" alt="\">

xml文件配置


    

    



自定義xml



    

    

    



JAVA文件的配置
package com.example.listview;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private ListView listView;
	private Myadapter adapter;
	private final String titles[] = { "昵稱:", "性別:", "年齡:", "學校:", "系別 :", "郵箱:" };// 標題數據
	private final String contents[] = { "風飛雪未揚", "男", "22歲", "河南大學", "教育科學學院",
			"[email protected]" };// 內容數據

	private int images[] = { R.drawable.a1, R.drawable.a2, R.drawable.a3,
			R.drawable.a4, R.drawable.a5, R.drawable.a6 };// 圖片數據

	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listView = (ListView) this.findViewById(R.id.listView1);
		adapter = new Myadapter(this);
		listView.setAdapter(adapter);
		// 設置選項的監聽事件
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView arg0, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this,
						"你選擇了:" + titles[position] + contents[position],
						Toast.LENGTH_LONG).show();// 土司提示

			}
		});
	}

	class Myadapter extends BaseAdapter {
		// 定義顏色,這裡定義了兩種交替顯示,讀者可以定義任意顏色
		private int color[] = { Color.CYAN, Color.GREEN };

		private Context myContext;

		// 構造方法傳遞Context對象,也可以使用 getApplicationContext()來獲取
		public Myadapter(Context myContext) {

			this.myContext = myContext;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return titles.length;// 返回列表選項的個數
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return position;// 返回當前位置
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;// 返回選中ID
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// 獲得顏色數組的id 0或1
			int colorId = position % color.length;

			// 通過緩存convertView,這種利用緩存contentView的方式可以判斷如果緩存中不存在View才創建View,如果已經存在可以利用緩存中的View,提升了性能
			if (convertView == null) {
				// 獲得View對象
				convertView = LayoutInflater.from(myContext).inflate(
						R.layout.my_adapter_view, null);
			}
			// 獲得組件
			ImageView image = (ImageView) convertView
					.findViewById(R.id.imageView1);
			TextView title = (TextView) convertView
					.findViewById(R.id.textView1);
			TextView content = (TextView) convertView
					.findViewById(R.id.textView2);
			// 設置組件信息
			image.setImageResource(images[position]);
			title.setText(titles[position]);
			content.setText(contents[position]);
			convertView.setBackgroundColor(color[colorId]);
			// 返回裝載後的view
			return convertView;
		}

	}
}

最終效果


這樣listView與adapter就基本上講完了,在開發一般只會用到這麼多,希望讀者好好掌握 以上的所有代碼基本都有注釋,看不明白的可以在下方留言,我會在第一時間進行回復
下節預報: SeekBar拖動條組件
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved