在開發的過程當中,發現ListView這個組件用得很是多,而ListView的使用過程當中,又每每與Adapter結下了不結之緣。java
ListView是什麼呢?Adapter又是什麼呢?android
ListView是Android手機系統中普遍使用的一個組件,以垂直的方式顯示全部的列表項,在顯示聯繫人名單等都用到了ListView。數據庫
Adapter是把數據和用戶界面View綁定到一塊兒的橋樑類,如ArrayAdapter、CursorAdapter、SimpleAdapter、ResourceCursorAdapter、SimpleCursorAdapter都是常見的,我用得比較多的也就是前三種。而這三種有什麼區別呢?其實主要是數據源的不一樣。1.String[]: ArrayAdapter 2. List<Map<String,?>>: SimpleAdapter 3. 數據庫Cursor: SimpleCursorAdapter,因此要選擇好使用。數組
ListView與ArrayAdapterapp
建立ListView有三種方法,第一種是在xml文件裏使用ListView組件,第二種是直接繼承ListActivity,第三種是在java文件中直接new出一個ListView對象,建議是在xml文件裏使用ListView組件,由於屬性控制各方面都比較好,可是也要看你項目的具體要求。ide
main.xmlthis
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListViewandroid:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>spa
MainActivity.javacode
package com.listview;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends Activity { private ListView listView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView=(ListView)findViewById(R.id.listView); //列表項數組 String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"}; //數組適配器 ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,weeks); //爲ListView設置適配器 listView.setAdapter(adapter); } }
模擬器上運行如上所示。xml
ListView與SimpleAdapter
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/weatherImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dip" /> <TextView android:id="@+id/weatherTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="20dip" /> </LinearLayout>
MainActivity.java
package com.listview;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.widget.ListView;import android.widget.SimpleAdapter;public class MainActivity extends Activity { private ListView listView; private String[] weatherName=new String[]{"太陽","雨天","雷雨"}; private int[] imageIds=new int[]{R.drawable.x,R.drawable.y,R.drawable.z}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView=(ListView)findViewById(R.id.listView); //建立一個list集合,List集合的元素是Map List<Map<String,Object>> lists=new ArrayList<Map<String,Object>>(); for (int i=0;i<weatherName.length;i++){ Map<String,Object> list=new HashMap<String, Object>(); list.put("weatherImage", imageIds[i]); list.put("weatherTextView", weatherName[i]); lists.add(list); } //建立SimpleAdapter SimpleAdapter simpleAdapter=new SimpleAdapter(this, lists, R.layout.main, new String[]{"weatherTextView","weatherImage"}, new int[]{R.id.weatherTextView,R.id.weatherImage}); listView.setAdapter(simpleAdapter); } }