Tips

Android DialogFragmentをつかってAlertDialogを表示する 【Android_TIPS】

Android DialogFragmentをつかってAlertDialogを表示する 【Android_TIPS】

Android 3.0から、android.support.v4パッケージが登場し、レイアウトを作る際にはFragmentクラスを使うことが推奨されるようになりました。

通常、FragmentクラスはAndroid 3.0以降でないと使うことができませんが、

Android 3.0未満のバージョンであってもandroid.support.v4パッケージを使用することで、Fragmentクラスを使用できるようになります。

Android SDK r20からはプロジェクトを新規作成すると、android.support.v4パッケージが

すでにリンクされた状態でプロジェクトが作成されるようです。

 

この変更によってさまざまなメソッドが非推奨になりましたが、その一つとしてAcitivityクラスのonCreateDialog()メソッドがあります。

今後はDialogFragmentクラスを使用し、AlertDialogを作成する方法が主流となっていくようです。

 

今回は、android.support.v4パッケージを使用し、DialogFragmentを使ってAlertDialogの表示を行っていきます。

 

Android 3.2のエミュレータ上で動かした場合

device-2012-10-12-140331

 

Android 2.1のエミュレータ上で動かした場合

device-2012-10-12-140908

 

 

src/com.example.hellodialogfragment/MainActivity.java

package com.example.hellodialogfragment;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;


public class MainActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyDialogFragment dialog = new MyDialogFragment();
        dialog.show(getSupportFragmentManager(), "dialog");
    }

    public void doPositiveClick() {
        Toast.makeText(this, "OKボタンがクリックされました", Toast.LENGTH_SHORT).show();
    }

    public void doNegativeClick() {
        Toast.makeText(this, "Cancelボタンがクリックされました", Toast.LENGTH_SHORT).show();
    }

    public static class MyDialogFragment extends DialogFragment {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle("タイトル");
            builder.setMessage("メッセージ");
            builder.setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            MainActivity activity = (MainActivity) getActivity();
                            activity.doPositiveClick();
                        }
                    });
            builder.setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            MainActivity activity = (MainActivity) getActivity();
                            activity.doPositiveClick();
                        }
                    });

            return builder.create();
        }
    }
}

 

ポイント

  • DialogFragmentクラスを継承したクラスをインナークラスもしくは別ファイルで作る。この際、staticクラスにしておく。
  • 上記クラス内で、onCreateDialog()メソッドをオーバーライドし、AlertDialogオブジェクトを作成する(いままでどおり)。
  • 戻り値に上記AlertDialogオブジェクトを渡す
  • ダイアログを表示したい場所で、上記クラスをインスタンス化し、show()メソッドを呼び出す。

 

参考HP

■Android Developers(DialogFragment)

http://developer.android.com/reference/android/app/DialogFragment.html

お勧め書籍

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search