[Android] AlertDialog-加入多選列表並取得選擇結果(Multi choice list)
Android手機的鬧鐘是大家常使用的功能,在選擇鬧鐘重複的週期時,畫面會跳出AlertDialog顯示星期一至星期日的選項List供使用者選擇多個時間點,今天要介紹的是如何在AlertDialog中加入Multi Choice List,並在使用者選擇Dialog的確認按鈕後,顯示所選擇的內容,這裡將以鬧鐘選擇週期日子的功能為例。
範例情境:
主畫面有個按鈕「選擇星期」,使用者點選後會出現具有Multi Choice List的AlertDialog,有多個時間人選擇,在按下Dialog「確認」按鈕後,系統將會顯示一個Toast訊息,內容為剛才所選擇的時間。
程式碼說明:
一、取得「選擇星期」按鈕物件參考後,註冊其OnClickListener函式,負責顯示具有Multi choice List的AlertDialog
//取得按鈕參考 Button dialogBtn = (Button)findViewById(R.id.dialogBtn); //register click event listener dialogBtn.setOnClickListener(onClick);二、在OnClickListener使用setMultiChoiceItems(items, checkedItems, listener)在AlertDialog加入多選列表,items參數為一個陣列,其代表顯示在List的每個item名稱,checkedItems代表List item的預設勾選狀態,最後是listener負責處理使用者選擇任一個item時所要執行的動作。
CharSequence[] item = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"}; boolean[] isChecked = new boolean[day.length]; /**選擇星期按鈕OnClick Listener*/ private View.OnClickListener onClick = new View.OnClickListener() { @Override public void onClick(View v) { //Display a dialog with a multi choice list new AlertDialog.Builder(MultiChoiceDialog.this) .setTitle("重複日期") .setMultiChoiceItems(day, isChecked, onChoice) .setNegativeButton("確認", showSelectedResult) .setNeutralButton("取消", null) .create() .show(); } };三、在完成按下按鈕顯示Dialog的部份後,接下來要處理User按下多選列表而所要執行的動作,在實作OnMultiChoiceClickListener的內容中,我們將使用者所選擇的item status進行狀態更新。
private OnMultiChoiceClickListener onChoice = new OnMultiChoiceClickListener(){ @Override public void onClick(DialogInterface dialog, int position, boolean checked) { //更新目前的選項checked status isChecked[position] = checked; } };四、最後,實作AlertDialog確認按鈕的DialogIterface.OnClickListener(),在按下確認後檢查每個item的checked狀態,如果為被勾選的狀態,就加入顯示結果中。
/**顯示User選擇結果*/ private DialogInterface.OnClickListener showSelectedResult = new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { String result = "你選擇了:"; for(int i=0;i< item.length;i++){ if(isChecked[i]==true){ result = result+","+item[i]; } } //顯示選擇的星期 Toast.makeText(MultiChoiceDialog.this, result, 3000).show(); } };最後在使用選擇幾個選項後,按下確認將會看到一個訊息顯示選擇的內容
留言
張貼留言