EU向けの同意バナーを停止しました
【Androidアプリ開発】ダイアログをポップアップで出したい 令和4年版(Java)

【Androidアプリ開発】ダイアログをポップアップで出したい 令和4年版(Java)

2022年6月29日

こんにちは、コンテンツクリエイターのともすけです。

Androidアプリの開発環境は、数年前の知識がしれっと使えなくなっていたりします。その理由はGoogleがAPIをちょいちょい変更するからなのですが、それは回避できるモノではないから付いていくしかありません。

いま、とある削除処理をするのに確認のためのポップアップをさせたくて、調べてコード書いて動作するのを確認したので共有したいと思います。

令和4年版と書いたのは、こういう技術情報はすぐ古くなってしまうため、情報が新しいのか古いのかを判断してもらいたくてタイトルに記載しました。

以下のコードには1行目のpackage文がありませんので、試したい環境に合わせて記載してください。

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;

public class DeleteCheckDialogFragment extends DialogFragment {
    private Context context;

    public DeleteCheckDialogFragment(Context context) {
        this.context = context;
    }
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("確認")
                .setMessage("消しますか?")
                .setPositiveButton("はい", (dialog, id) -> {
                    Toast.makeText(context, "はいが押された", Toast.LENGTH_SHORT).show();
                })
                .setNegativeButton("いいえ", (dialog, id) -> {
                    Toast.makeText(context, "いいえが押された", Toast.LENGTH_SHORT).show();
                });
        // Create the AlertDialog object and return it
        return builder.create();
    }
}

上記記述だけではポップアップダイアログは出ません。インスタンスして使用します。以下のようなコードをMainActivityなどに記載すれば動作するかと思います。

1行目のContextは、MainActivity内であれば「this」でContextが得られます。それ以外では適時上手くやってください。getApplicationContext()とかね…。

Context context = this;
FragmentManager fragmentManager = getSupportFragmentManager();
DeleteCheckDialogFragment fragment = new DeleteCheckDialogFragment(context);
fragment.show(fragmentManager, "TAG_NAME");

こういうのを書いていると、読み手さんから

tomosuke
tomosuke

いや、Toastするだけじゃ何もできないじゃん。もっと現場で使えそうなコードを書いてよ

とか思われそうですが(そんなことはない?)、取り急ぎ自分メモとしてアップしたのでご了承ください。

それではまた