[Android] 可多選的ListView (multi choice)


ListView除了用來呈現同性質的資料之外,也提供了選取模式(choice mode),讓使用者可以從List中勾選一個或多個row,本文將針對如何建立可多選的ListView與該如何取得選擇的資料進行說明。


程式碼說明

1. 建立ListActivity。

package com.MultiChoiceList;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MultiChoiceList extends ListActivity {
    
 private String[] listData = {"Taiwan", "Japan", "US", "Hongkong", "China", "Guam", "Korea"};
 private ListView list;
 
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 }
   
}
}
2. 定義Layout XML,由於是ListActivity,因此Layout必須包含一個id名為@android:id/list的ListView。
<?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"
>
 <Button
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="Show Result"
   android:onClick="showResult">
 />
 <ListView
   android:id="@android:id/list"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
 />
</LinearLayout>
3. 將ListView設定為Multi Choice Mode。
//設定ListView為Multi-choice mode
list = getListView();
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
4. 指定Adapter為android.R.layout.simple_list_item_multiple_choice,它是一個CheckTextView,可以讓ListView管理其checked狀態。
//指定List Adapter
list.setAdapter(
new ArrayAdapter< string>(this, android.R.layout.simple_list_item_multiple_choice, listData));
5. 取得ListView目前選擇的資料,並以Toast訊息顯示(見下圖)。
public void showResult(View v){

String countries = "";
     
for(int i=0;i< list.getCheckedItemPositions().size();i++)
{
 countries += listData[list.getCheckedItemPositions().keyAt(i)]+",";
}
     
 Toast.makeText(this, countries, 3000).show();

}

留言

這個網誌中的熱門文章

[Android] layout_weight的妙用-讓View的大小以百分比率顯示(proportionate size)

[Android] 內部儲存體(Internal Storage)的檔案系統讀寫(File I/O)