Listview是用來展示一些重復性的數據用的,比如一些列表集合數據展示到手機,需要適配器作為載體獲取數據,最后將數據填充到布局。
ListView里面的每個子項Item可以使一個字符串,也可以是一個組合控件。而適配器就是 Item數組,動態數組有多少元素就生成多少個Item;
ArrayAdapter數組適配器比較簡單,適合純文字。布局文件可以自己寫,也可以用系統的。
ArrayAdapter適配器實例:
歸納步驟:
1、准備數據源
2、新建適配器,綁定數據源
3、視圖加載適配器
在布局文件中加入一個ListView控件:
<ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" >
程序中:適配器的作用是數據和視圖之間的橋梁
list = (ListView)findViewById(R.id.list);
//定義數據源作為ListView內容 String [] arr_data = {"數據1","數據2","數據3","數據4"};
//新建一個數組適配器ArrayAdapter綁定數據,參數(當前的Activity,布局文件,數據源) arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr_data);
//視圖(ListView)加載適配器 list.setAdapter(arr_adapter);
預覽效果:

也可以使用自定義布局:
把
android.R.layout.simple_list_item_1
改為:
R.layout.name 里面只放一個TextView
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#ff0000" />
SimpleAdapter適配器實例:
相比ArrayAdapter,SimpleAdapter則有很強的擴展性,可以自定義出各種效果。
歸納步驟:
1、准備數據源:指定由Map組成的List數據源
2、新建適配器,設置鍵值名和對應控件id,綁定數據
3、視圖加載適配器
先看一下SimpleAdapter 的構造函數:
new SimpleAdapter(context, data, resource, from, to)
參數:
context ------SimpleAdapter關聯的View的運行環境
data ---------一個Map組成的List。在列表中的每個條目對應列表中的一行,每一個map中應該包含所有在from參數中指定的鍵
resource ------ 一個定義列表項的布局文件的資源ID。布局文件將至少應包含那些在to中定義了的ID
from ---------- 一個將被添加到Map映射上的鍵名
to -------------將綁定數據的視圖的ID,跟from參數對應
程序代碼:
package com.example.testsimpleadapter; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import android.support.v7.app.ActionBarActivity; import android.widget.ListView; import android.widget.SimpleAdapter; import android.os.Bundle; public class MainActivity extends ActionBarActivity { private ListView mylist; private SimpleAdapter simp_ada; private ArrayList<Map<String, Object>> arr_data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list); mylist = (ListView) findViewById(R.id.mylist); //每一行數據就是一個Map,指定由Map組成的List, arr_data = new ArrayList<Map<String, Object>>(); // 新增數據 for (int i = 0; i < 20; i++) { Map map = new HashMap<String, Object>(); //map放入兩個鍵值對,鍵名與from對應, map.put("pic", R.drawable.ic_launcher); map.put("text", "數據" + i); //往list添加數據 arr_data.add(map); } // 新建適配器 ,綁定數據 String[] from = { "pic", "text" }; int[] to = { R.id.pic, R.id.text }; simp_ada = new SimpleAdapter(this, arr_data, R.layout.listitem,from,to); // 加載適配器 mylist.setAdapter(simp_ada); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/pic" android:layout_marginLeft="6dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center_vertical" android:text="文字" /> </LinearLayout>
