Android開發詳解之ListView詳解一

來源:互聯網
上載者:User

標籤: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);}}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.