《Android》『ListView』- 使用 ArrayAdapter 於程式碼中設定清單內容 (動態載入)
《Android Developers 參考文獻》
《簡單介紹》
在上一篇 ListView 的基本用法(靜態載入)中,我們已經介紹過如何透過直接在介面布局檔(.xml)中設定 ListView 的清單內容資訊,來快速建立此 ListView,但若是我們想要在程式開始執行以後,才去對 ListView 設定清單內容,此時我們可以使用 ArrayAdapter 來做設定。
《使用 ArrayAdapter 來設定 ListView 的清單內容資訊》
ArrayAdapter 是在 Android 當中最簡單的 adapter,它可以連結一個字串陣列到一個只有一個 TextView 元件的 ListView 物件當中。我們可以說,ListView 類別是負責將列表顯示在螢幕上,而 Adapter 類別負責處理資料內容與介面的連結。
這邊我們透過程式碼片段的方式,說明如何使用 ArrayAdapter。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:id="@+id/txt_ItemSelect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/region_selected" android:textSize="20sp" /> <ListView android:id="@+id/lsv_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#ffff0000" android:dividerHeight="2dp" /> </LinearLayout> |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="utf-8"?> <resources> . . <string-array name="region_list"> //定義清單資料 <item>Item 01</item> <item>Item 02</item> <item>Item 03</item> <item>Item 04</item> </string-array> . . </resources> |
string.xml
這裡我們同樣於介面布局檔(.xml)中宣告了 ListView 元件,並且於資源檔(string.xml)中,定義了列表清單內容,接著我們透過 ArrayAdapter 在程式碼中設定 ListView 的相關屬性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
. . . public class MainActivity extends Activity { private TextView txt_ItemSelect; private ListView lsv_main; //ListView 宣告 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txt_ItemSelect = (TextView) findViewById(R.id.txt_ItemSelect); lsv_main = (ListView) findViewById(R.id.lsv_main); ArrayAdapter<CharSequence> arrAdap = ArrayAdapter.createFromResource(MainActivity.this, R.array.region_list, //設定清單內容資訊 android.R.layout.simple_list_item_single_choice); //設定列表選項格式 //simple_list_item_1 另一種預設介面 lsv_main.setAdapter(arrAdap); //將設定好的 ArrayAdapter 丟進 ListView lsv_main.setSelector(R.drawable.green); //改變選取項目的背景色為圖片 lsv_main.setSelection(2); //ListView 預設會選取第3筆資料 lsv_main.setChoiceMode(ListView.CHOICE_MODE_SINGLE); //設定列表選擇模式(單選) lsv_main.setOnItemClickListener(lsv_main_OnItemClickListener); } private AdapterView.OnItemClickListener listViewRegionOnItemClick = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub txt_ItemSelect.setText("你選擇了: " + ((TextView) view).getText()); } }; ... } . . . |
MainActivity.java
android.R.layout.simple_list_item_single_choice 是 Android SDK 所提供的資源檔,提供了一個基本的單選介面,使用這個介面以後,我們還必須透過 .setChoiceMode(ListView.CHOICE_MODE_SINGLE) 將選單設為單選模式;我們透過 ArrayAdapter.createFromResource() 的方式,建構並定義 ArrayAdapter 中所使用到的列表內容資訊以及列表樣式。接著透過 ListView.setAdapter() 來將指定的 ArrayAdapter 物件設定給所使用的 ListView 物件。這麼一來,一個基本的動態載入 ListView 就完成了。
➥『ListView』- 自訂一個繼承 BaseAdapter 的 Adapter 以實現客製化 ListView
《使用 Adapter 的好處》
使用 Adapter 來處理 ListView 資料的好處是,LisetView的資料可以隨著程式運行動態的改變,我們利用 ArrayAdapter 的 add() 方法新增資料到 adapter 尾端或是用 insert() 方法新增資料到特定的位置;刪除資料則使用 remove() 方法。
需要注意的是,一旦adapter內的資料有了變更,則 adapter 和 ListView 的內容就失去了同步,這個時候需要由 adapter 發送一個 notifyDataSetChanged() 方法通知 ListView 重新同步顯示的內容。
臉書留言
一般留言