[Android] AlertDialog-加入按鈕及其對應的事件

AlertDialog除了傳遞訊息給使用者之外,可能還需要等待使用者的特定回應,以讓系統作出適當的動作,最常見的就是以按鈕選項與使用者進行互動,AlertDialog.Builder這個Nested Class提供了一些建立AlertDialog相關組成元件的函式,其中正包含按鈕,本文將以在AlertDialog加入按鈕以及其相對應事件處理為主題進行說明。

範例情境:
主畫面有個按鈕「顯示Dialog」可以顯示一個包含三個按鈕的AlertDialog,系統會針對使用者所按的按鈕,將不同文字顯示在「按鈕事件結果:」下方文字欄位,示意圖如下:


程式碼說明:

建立AlertDialog.Builder物件,並以setPositiveButton、setNeutralButton、setNegativeButton函式建立三個不同位置的按鈕並註冊其click事件的處理函式

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("AlertDialog Button Demo")
       .setMessage("不同位置的按鈕")
       .setCancelable(false)
       .setPositiveButton("位置:Positive", 
       new DialogInterface.OnClickListener() 
       {
    
          @Override
          public void onClick(DialogInterface dialog, int which) 
          {
              // TODO Auto-generated method stub
              result.setText("你按了Positive按鈕!");
          }
       }
       )
       .setNeutralButton("位置:Neutral", 
       new DialogInterface.OnClickListener() 
       {
    
          @Override
          public void onClick(DialogInterface dialog, int which) 
          {
              // TODO Auto-generated method stub
              result.setText("你按了Neutral按鈕!");
          }
       }
       )
       .setNegativeButton("位置:Negative", 
       new DialogInterface.OnClickListener() 
       {
    
          @Override
          public void onClick(DialogInterface dialog, int which) 
          {
              // TODO Auto-generated method stub
              result.setText("你按了Negative按鈕!");
          }
        }
        );

AlertDialog呈現的樣子,注意三個Button的位置

在使用者點擊其中一個按鈕後,AlertDialog會消失,並呼叫該Button所註冊的onClick事件處理函式(見下方程式碼),下圖為使用者點擊Positive按鈕後顯示事件結果:

@Override
public void onClick(DialogInterface dialog, int which) 
{
    // TODO Auto-generated method stub
    result.setText("你按了Positive按鈕!");
}


完整程式碼

package com.AlertDialogButton;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class AlertDialogButton extends Activity 
{
    private TextView result;
    private Button dialogShowButton;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //取得顯示按鈕事件所產生結果的TextView參考
        result = (TextView)findViewById(R.id.result_text);
        
        //取得顯示Dialog的Button參考
        dialogShowButton = (Button)findViewById(R.id.show_btn);
        
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("AlertDialog Button Demo")
               .setMessage("不同位置的按鈕")
               .setCancelable(false)
               .setPositiveButton("位置:Positive", 
               new DialogInterface.OnClickListener() 
               {
    
                @Override
                public void onClick(DialogInterface dialog, int which) 
                {
                 // TODO Auto-generated method stub
                 result.setText("你按了Positive按鈕!");
                }
               }
               )
               .setNeutralButton("位置:Neutral", 
               new DialogInterface.OnClickListener() 
               {
    
                @Override
                public void onClick(DialogInterface dialog, int which) 
                {
                 // TODO Auto-generated method stub
                 result.setText("你按了Neutral按鈕!");
                }
               }
               )
               .setNegativeButton("位置:Negative", 
               new DialogInterface.OnClickListener() 
               {
    
                @Override
                public void onClick(DialogInterface dialog, int which) 
                {
                 // TODO Auto-generated method stub
                 result.setText("你按了Negative按鈕!");
                }
               }
               );
        final AlertDialog alert = builder.create();
        
      //註冊按鈕click動作傾聽函式
      dialogShowButton.setOnClickListener(new OnClickListener()
      {
        @Override
           public void onClick(View arg0) 
          {
            // TODO Auto-generated method stub
            alert.show();
          }         
      }
      );
    }
}

留言

這個網誌中的熱門文章

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

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

【海外婚紗】道具行李篇