●實作練習:預期畫面 
 

AlertDialog    AlertDialog   AlertDialog

AlertDialog     AlertDialog

●補充說明:

(一)AlertDialog 選擇support會比較好,因為會支援舊版的android系統

AlertDialog

(二) 這個方塊告訴我們setPositiveButton()中的兩個參數放甚麼!

AlertDialog

(三)當匿名類別使用外部的變數時,因為考量到匿名類別的生命週期和外部變數可能會不一樣,所以要把被使用到的外部變數宣告為final,而匿名類別會自動把該變數copy下來
 
 

●實作練習:xml

<TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textColor="@android:color/background_dark"
    android:layout_gravity="center"
    android:text="Hello World!"/>
<Button
    android:id="@+id/ok"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="一個按鈕"
    android:onClick="ok"/>
<Button
    android:id="@+id/secondbtn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="兩個按鈕"
    android:onClick="secondbtn"/>
<Button
    android:id="@+id/thirdbtn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="三個按鈕"
    android:onClick="thirdbtn"/>

 

●實作練習:java code

=>MainActivity 要先implements DialogInterface.OnClickListener

public void ok(View view) {
    //打造的對話框使用當前的activity主題顏色
    new AlertDialog.Builder(this)
            .setMessage("你好帥喔")
           //將此按鈕事件委託給當前的activity
           .setPositiveButton("我知道",this)
           .show();
}

@Override 
//第一個按鈕的postiveButton的onClick method
public void onClick(DialogInterface dialogInterface, int i) {
    text.setText("我知道");
}

//按下secondbtn,要將兩個按鈕交給同一個alert a物件處理
public void secondbtn(View view) {
    alert a=new alert();
    new AlertDialog.Builder(this)
            .setMessage("你好帥喔")
            .setPositiveButton("謝謝",a)
            .setNegativeButton("狗腿",a)
            .show();
}


//這邊將第個二按鈕的對話框按鈕事件委託給內部類別alert
private class alert implements AlertDialog.OnClickListener{
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        switch (i){
            //DialogInterface.BUTTON_POSITIVE會是一個整數,類似R.id的作法
            case DialogInterface.BUTTON_POSITIVE:
                text.setText("謝謝");
                break;
            case DialogInterface.BUTTON_NEGATIVE:
                text.setText("狗腿");
                break;
        }
    }
}

//當第三個按鈕按下去時,用匿名類別直接實作程式碼,不再另外寫一個類別,當裡面的程式很簡單的時候適用
public void thirdbtn(View view) {
    new AlertDialog.Builder(this)
            .setMessage("你好帥喔")
            .setPositiveButton("謝謝讚美", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    text.setText("謝謝讚美");
                }
            })
            .setNegativeButton("太狗腿了", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    text.setText("太狗腿了");
                }
            })
            .setNeutralButton("無言", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    text.setText("無言");
                }
            })
            .show();
}

 

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

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

    簡單。生活。享受

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