アラートダイアログを表示してみる。

DialogFragmentを継承したクラスを作ってonCreateDialogでAlertDialog.Builderで作ったDialogを返すようにする。表示するところでは、そのクラスのインスタンスを作ってshowしてやる。

package jp.hemohemo.testalert;

import android.app.Dialog;
import android.content.DialogInterface;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    public static class MyAlertDialogFlagment extends DialogFragment {
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setMessage("hoge")
                    .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Log.d("TAG", "Clicked OK");
                        }
                    })
                    .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Log.d("TAG", "Clicked Cancel");
                        }
                    });
            return builder.create();
        }
    }

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

        // ボタンをクリックしたらアラートを表示するように設定。
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MyAlertDialogFlagment alert = new MyAlertDialogFlagment();
                alert.show(getSupportFragmentManager(), "TAG");
            }
        });
    }
}

よく、間違っているのがAlertDialog.Builderで作って、そのshow()を呼んでいるやつだ。これをするとダイアログ表示中に画面の回転なんかをするとandroid.view.WindowLeakedって例外がでる。