Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發詳解之ListView詳解一

Android開發詳解之ListView詳解一

編輯:關於Android編程

列表ListView介紹和實例


1.ListView -- ListActivity -- ListAdapter
2.ArrayAdapter結合ListView進行顯示
3.SimpleAdapter結合ListView進行顯示
4.處理單擊ListView事件,處理選擇ListView的事件
5.使用SimpleCursorAdapter與ListView進行關聯

ListView :

要讓一個ListView顯示出來需要的3個條件:

1.ListView --- 需要被顯示的列表
2.Data --- 和ListView綁定的數據,一般是一個Cursor或字符串數組
3.ListAdapter --- data和ListView的橋梁 --- 適配作用


常用ListAdapter子類:


ArrayAdapter --- 數組適配 ---- ListAdapter的直接子類


ArrayList<類型>(context,int itemLayout, data)
context:上下文環境
itemLayout:自定義的每一項要顯示的Layout
data:要顯示的數據
例子:
ArrayAdapter adapter = new ArrayAdapter(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
android.R.layout.simple_list_item_1 --- 使用Android自帶的 每一項Listview顯示布局 -- 實際應用中常常自定義此item布局


特別注意:itemLayout --- ListView中每一項(行)的布局 --- 可以引用系統自帶的,但 實際項目中更多是使用自定義的item布局


系統自帶的常用item布局:
android.R.layout.simple_list_item_1 ----- 每一項只有一個TextView
android.R.layout.simple_list_item_1 ----- 每一項只有兩個TextView
android.R.layout.simple_list_item_single_choice ----- 每一項有一個TextView,但這一項可以被選擇


SimpleAdapter --- 簡單適配 ---- ListAdapter的直接子類

通過SimpleAdapter可以讓ListView當中的每一項內容更加個性化,
通常將ListView中某項的布局信息寫在XML文件中,這個布局文件通過R.layout.XX -- 引入到ListView中

SimpleAdapter是ArrayList和Listview之間的橋梁
ArrayList中的每一項都是一個Map類型。ArrayList當中的每一項Map對象都和ListView當中的一項進行數據綁定和一一對應


SimpleAdapter的構造器:
public SimpleAdapterK(Context context, List> data, int resource, String[] from , int[] to)


context -- 上下文
data -- 基於Map的List,Data裡面的每一項都和ListIView裡的每一項對應。Data裡面的每一項都是Map類型,
這個Map類中包含了ListView每一行需要的數據 --- 常用 data = new ArrayList>();
resource -- 一個layout, 必須包含在to中出現的那些View,系統提供或自定義layout布局都可。
系統提供的有:android.R.layout.simpe_list_item_single_choice
android.R.layout.two_line_list_item
from -- 數組名,每一個名字是為了在ArrayList中的每一個item中索引Map的Object用的
to -- 這裡面是一個TextView的數組,這些TextView以id形式表示,這鞋View必須是TextView



為ListView中的每一項添加事件處理: OnItemClickListener

OnItemClickListener listener = new OnItemClickListener() {


@Override
public void onItemClick(AdapterView parent, View view, int position,
long id) {
setTitle(parent.getItemAtPosition(position).toString());
}
};

listView.setOnItemClickListener(listener);


說明:
onItemClick -- 回調函數,當用戶單擊ListView每一項時,自動執行
parent --- 被單擊的ListView
view --- 用戶操作的那一項
position --- 操作的item項在ListView中的位置
id --- 被選中的那一行的id


getItemAtPosition(position) --- 通過position獲得和這一行綁定的數據, 本例中只是把改行內容作為title寫出來

listView.setOnItemClickListener(listener) --- 將監聽器注冊到ListView中


實例代碼:

ArrayAdapter與ListView


package com.example.androidbasicdemo1;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
 * ArrayList<類型>(context,int itemLayout, data)
 * context:上下文環境
 * itemLayout:自定義的每一項要顯示的Layout
 * data:要顯示的數據
 * 
 * 例子:
 * ArrayAdapter adapter = new ArrayAdapter(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
   android.R.layout.simple_list_item_1  --- 使用Android自帶的 每一項Listview顯示布局   -- 實際應用中常常自定義此item布局

 * @author JayHe
 *
 */
public class ArrayAdapterListViewActivity extends Activity {

	private ListView listView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_array_adapter_list_view);

		//從xml布局文件中獲得ListView對象
		listView = (ListView) findViewById(R.id.arrayadapterlistView1);
		
		//定義要顯示的數據
		String[] data = getResources().getStringArray(R.array.items_country);
		//定義適配器
		ArrayAdapter adapter = new ArrayAdapter(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
		
		//為ListView添加適配器
		listView.setAdapter(adapter);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.array_adapter_list_view, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}


}



SimpleAdapter與ListView


package com.example.androidbasicdemo1;

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

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

public class SimpleAdapterListViewActivity extends Activity {

	private List> data;
	
	private ListView listView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_simple_adapter_list_view);
		
		
		listView = (ListView) findViewById(R.id.simpleadapterlistView1);
		
		SimpleAdapter adapter = new SimpleAdapter(SimpleAdapterListViewActivity.this, prepareData(), R.layout.slef_list_item1,new String[]{"姓名","性別"}, new int[]{R.id.selflistview1textView1,R.id.selflistview1textView2});
		
		listView.setAdapter(adapter);
	
		
		OnItemClickListener listener = new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView parent, View view, int position,
					long id) {
				setTitle(parent.getItemAtPosition(position).toString());
			}
		};
		
		listView.setOnItemClickListener(listener);

	}

	
	private List> prepareData(){
		data = new ArrayList>();
		Map item;
		item = new HashMap();
		item.put("姓名", "吳歡小盆友");
		item.put("性別", "女");
		data.add(item);
		item = new HashMap();
		item.put("姓名", "馮榮小朋友");
		item.put("性別", "女");
		data.add(item);
		item = new HashMap();
		item.put("姓名", "夏明");
		item.put("性別", "男");
		data.add(item);
		item = new HashMap();
		item.put("姓名", "小華");
		item.put("性別", "男");
		data.add(item);
		return data;
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.simple_adapter_list_view, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}


}


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