●實作練習:預期畫面 

Screenshot_2019-05-02-13-57-21.png     Screenshot_2019-05-02-13-57-37.png    Screenshot_2019-05-02-13-57-48.png

     

●實作練習:xml

(一)values/array.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="array">
        <item>我知道</item>
        <item>你少來</item>
        <item>還用你說嗎</item>
    </string-array>
</resources>

 

(二)activity_main.xml

<Button
    android:id="@+id/fourbtn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="fourbtn"
    android:text="項目清單" />

<Button
    android:id="@+id/fifthbtn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="fifthbtn"
    android:text="可複選的核取方塊項目" />

<Button
    android:id="@+id/sixthbtn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="sixthbtn"
    android:text="單選的radio按鈕項目" />

 

●實作練習:java code

//按鈕四會產生項目清單
public void fourbtn(View view) {  
   final String[] arr=getResources().getStringArray(R.array.array);
    //this就是誰要使用這個dialog
   //android.R.style.Theme_DeviceDefault_Dialog 指定要用的主題風格
    new AlertDialog
            .Builder(this,android.R.style.Theme_Holo_Light_Dialog_NoActionBar)
            .setTitle("你好帥")
            .setItems(arr, new DialogInterface.OnClickListener() {
            @Override
                //int i是代表陣列中選取的那個項目的索引碼
                public void onClick(DialogInterface dialogInterface, int i) {
                    text.setText(arr[i]);
                }
            })
            .show();
}

public void fifthbtn(View view) {
     final String[] arr=getResources().getStringArray(R.array.array);
    //建立一個陣列紀錄每個checkbox是否有被選取,陣列長度要和字串長度一樣
    final boolean[] selected=new boolean[arr.length];
    new AlertDialog
            .Builder(this,android.R.style.Theme_Holo_Light_Dialog_NoActionBar)
            .setTitle("你超正")
            //多選要用setMultiChoiceItems
            .setMultiChoiceItems
            (arr, selected, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                //這邊的onClick是代表每次勾選或取消勾選時執行,
                //i代表這次勾選的項目編號,b代表這次勾選的選項狀態
                public void onClick
               (DialogInterface dialogInterface, int i, boolean b) {
                //因為勾選後沒有要執行甚麼程式,所以這邊空白,執行是在ok按鈕按下去才做
                }
            })
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick
                (DialogInterface dialogInterface, int which) {
                  StringBuilder result=new StringBuilder();
                    //按下ok按鈕後,到selected陣列逐一檢查,如果某個選項is true,
                     //就把同樣編碼的arr陣列字串丟到stringbuilder                    for(int i=0;i<selected.length;i++){
                        if(selected[i]){
                            result.append(arr[i]).append("\n");
                        }
                    }
                    text.setText(result);
                }
            })
            .setNegativeButton
            ("CANCEL", new DialogInterface.OnClickListener() {
                @Override//cancelbutton沒有其他動作
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            })
            .show();

}

//mChoice用來記錄被選取的選項,因為selectN(被選取選項的編號)是一個區域變數,沒
//辦法丟給okonclick,所以要丟給一個全域變數來記錄
private int mChoice;
public void sixthbtn(View view) {
    final String[] arr=getResources().getStringArray(R.array.array);
    mChoice=0;
    new AlertDialog.Builder(this)
            .setTitle("你好美")
            //單一選項用setSingleChoiceItems,第二個參數是被選取選項的編號
            .setSingleChoiceItems
           (arr, mChoice, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int selectN) {
                    mChoice=selectN;
                }
            })
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    text.setText(arr[mChoice]);
                }
            })
            .setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    text.setText("算了吧");
                }
            })
            .show();

}

 

*程式參考(gitHub):AlertDialog實作

arrow
arrow
    創作者介紹
    創作者 muchone 的頭像
    muchone

    簡單。生活。享受

    muchone 發表在 痞客邦 留言(0) 人氣()