2012年5月23日水曜日

ボタンクリック時に確認ダイアログ (AlertDialog) を表示する

Android アプリで確認ダイアログを表示するには、AlertDialog クラスを使用します。
ここでは、AlertDialog クラスを使用してダイアログを生成し、ボタンクリック時にダイアログを表示するサンプルを紹介します。



ダイアログを生成し、ボタンクリック時に表示する手順は以下のようになります。
  1. AlertDialog.Builder (AlertDialog を作成するためのクラス)  を生成
  2. 1.に、タイトル、表示メッセージ、ボタン等を設定
  3. AlertDialog を生成
  4. ボタンクリックでダイアログを表示

■ リソース


main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btnShow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn_exe" />
</LinearLayout>


string.xml
<resources>
    <string name="btn_exe">実行</string>
    <string name="dlg_title">実行確認</string>
    <string name="dlg_msg">実行します。よろしいですか?</string>
</resources>



■ ソース

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.Toast;

public class AlertDlgSampleActivity extends Activity {

    AlertDialog.Builder mAlertDlg;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 1. AlertDialog.Builder クラスのインスタンスを生成
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        
        // 2. ダイアログタイトル、表示メッセージ、ボタンを設定
        builder.setTitle(R.string.dlg_title);
        builder.setMessage(R.string.dlg_msg);
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // OK ボタンクリック処理
                Toast.makeText(AlertDlgSampleActivity.this, 
                               "OK Click", Toast.LENGTH_SHORT).show();
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // Cancel ボタンクリック処理
                Toast.makeText(AlertDlgSampleActivity.this,
                               "Cancel Click", Toast.LENGTH_SHORT).show();
            }
        });
        
        // 3. ダイアログを生成
        mAlertDlg = builder.create();

        // 4. ボタンクリック時にダイアログを表示
        Button btnExe = (Button)findViewById(R.id.btnExe);
        btnExe.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                // ダイアログ表示
                mAlertDlg.show();
            }
        });
    }
}


■ 説明

それぞれの処理について説明していきます。

1. AlertDialog.Builder クラスのインスタンスを生成
ダイアログを生成するために、 AlertDialog.Builder クラスのインスタンスを生成します。
AlertDialog.Builder mAlertDlg;
mAlertDlg = new AlertDialog.Builder(this);


2. タイトル、メッセージ、ボタンを設定
setTitle でダイアログのタイトル、
setMessage で表示するメッセージ、
setPositiveButton, setNegativeButton で、OK, Cancel ボタン、
を設定します。
mAlertDlg.setTitle(getString(R.string.dlg_title));
mAlertDlg.setMessage(getString(R.string.dlg_msg));
mAlertDlg.setPositiveButton( ~ );
mAlertDlg.setNegativeButton( ~ );

setXXXXButton の引数は、ボタンに表示する文字と、クリック時の処理(リスナ)を渡します。
クリック処理が不要な場合は null を指定します。

また、ボタンにはもうひとつ setNeutralButton もあります。
各ボタンで機能的な違いはありません。わかりやすいように Negative, Positive 等の名称に分かれているだけです。
但し、同じ種類のボタンは 2 つ以上追加できないので、ボタンは最大 3 つになります。

また、その他の設定として、ダイアログを端末の戻るボタンで閉じることができるかどうかを
setCancelable メソッドで設定できます。
(引数 = true で閉じることができる。 false で閉じることができない 用に設定)


3. ダイアログを生成
AlertDialog.Builder クラスの Create メソッドで、AlertDialog を生成します。

mAlertDlg = builder.create();


4. ボタンクリックでダイアログを表示
ボタンにクリックリスナを設定し、その中の OnClick でダイアログを表示します。
ダイアログの表示には、 AlertDialog クラスの show メソッドを使用します。
Button btnExe = (Button)findViewById(R.id.btnExe);
btnExe.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        // ダイアログ表示
        mAlertDlg.show();
    }
});



0 件のコメント:

コメントを投稿