ユーザーに注意を喚起したり何かを選択させたりするのに、ポップアップでAlertDialogを使うと便利です。AlertDialogはDialogFragmentを継承したクラスを使って作成します。
Android Studio
2021.2.1
2021.2.1
AlertDialog
こちらで簡単なAlertDialogを作成しましたが
Toastは一定時間で消えてしまいますがAlertDialogはそのまま表示してくれるので、ユーザーにある程度長いメッセージを出したり、何か...
DialogFragmentを使うことでよりコントロールして作成できます
AlertDialogはFragment を使って、別クラスで作ります。
ボタンがタップされたら、DialogFragmentを継承したクラスを呼びその中でAlertDialogを作成します。onCreateDialog()を使ってユーザーの選択を受け取ります
選択された項目によって、文字をMainActivityに返すサンプルを作ってみましょう。
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
//package your.app.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentManager; import androidx.annotation.NonNull; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView textView; private DialogFragment dialogFragment; private FragmentManager fragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.text_view); Button button = findViewById(R.id.button); // ボタンタップでAlertを表示させる button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fragmentManager = getSupportFragmentManager(); // DialogFragment を継承したAlertDialogFragmentのインスタンス dialogFragment = new AlertDialogFragment(); // DialogFragmentの表示 dialogFragment.show(fragmentManager, "test alert dialog"); } }); } public void setTextView(String message){ textView.setText(message); } // DialogFragment を継承したクラス public static class AlertDialogFragment extends DialogFragment { // 選択肢のリスト private String[] menulist = {"選択(1)","選択(2)","選択(3)"}; @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); // タイトル alert.setTitle("Test AlertDialog"); alert.setItems(menulist, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int idx) { // 選択1 if (idx == 0) { setMassage(menulist[0]); } // 選択2 else if (idx == 1) { setMassage(menulist[1]); } // 選択3, idx == 2 else{ setMassage(menulist[2]); } } }); return alert.create(); } private void setMassage(String message) { MainActivity mainActivity = (MainActivity) getActivity(); if(mainActivity!= null) { mainActivity.setTextView(message); } } } } |
レイアウト
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" android:background="#cfd" tools:context=".MainActivity"> <TextView android:id="@+id/text_view" android:text="@string/text" android:textSize="40sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:text="@string/button" android:textSize="20sp" /> </LinearLayout> |
strings.xml
1 2 3 4 5 |
<resources> <string name="app_name">YourAppName</string> <string name="text">Test AlertDialog</string> <string name="button">Button</string> </resources> |
これで出来上がりです
尚、複数のアラートは、別の作業が必要になります
関連ページ:
簡単なAlertDialog
AlertDialog:FragmentDialogを使って設定
AlertDialogに画像を設定
References:
ダイアログ | Android Developers
AlertDialog | Android Developers