標籤:android開發 執行個體 listview
列表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<String> adapter = new ArrayAdapter<String>(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<String,?>類型。ArrayList當中的每一項Map對象都和ListView當中的一項進行資料繫結和一一對應
SimpleAdapter的構造器:
public SimpleAdapterK(Context context, List<? extends Map<String,?>> data, int resource, String[] from , int[] to)
context -- 上下文
data -- 基於Map的List,Data裡面的每一項都和ListIView裡的每一項對應。Data裡面的每一項都是Map類型,
這個Map類中包含了ListView每一行需要的資料 --- 常用 data = new ArrayList<Map<String,Object>>();
resource -- 一個layout, 必須包含在to中出現的那些View,系統提供或自訂layout布局都可。
系統提供的有:android.R.layout.simpe_list_item_single_choice
android.R.layout.two_line_list_item
from -- 數組名,每一個名字是為了在ArrayList中的每一個item中索引Map<String, Object>的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<String> adapter = new ArrayAdapter<String>(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;@Overrideprotected 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<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);//為ListView添加適配器listView.setAdapter(adapter);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.array_adapter_list_view, menu);return true;}@Overridepublic 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<Map<String, Object>> data;private ListView listView;@Overrideprotected 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() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {setTitle(parent.getItemAtPosition(position).toString());}};listView.setOnItemClickListener(listener);}private List<Map<String, Object>> prepareData(){data = new ArrayList<Map<String, Object>>();Map<String, Object> item;item = new HashMap<String, Object>();item.put("姓名", "吳歡小盆友");item.put("性別", "女");data.add(item);item = new HashMap<String, Object>();item.put("姓名", "馮榮小朋友");item.put("性別", "女");data.add(item);item = new HashMap<String, Object>();item.put("姓名", "夏明");item.put("性別", "男");data.add(item);item = new HashMap<String, Object>();item.put("姓名", "小華");item.put("性別", "男");data.add(item);return data;}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.simple_adapter_list_view, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}