LoginSignup
0
0

More than 1 year has passed since last update.

a-2-5.モーダル表示(DialogFragment)

Last updated at Posted at 2022-12-07

a-2-5.モーダル表示(DialogFragment)

目標設定

一覧に戻る

課題

  1. DialogFragmentを利用してダイアログを表示できるか。
  2. DialogFragmentからActivityへ入力内容を共有できるか。

Github

テスト実装

DialogFragmentTestActivity.kt
class DialogFragmentTestActivity : AppCompatActivity(), View.OnClickListener,
    DialogFragmentTestFragment.DialogListener {
    private lateinit var displayButton: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_dialog_fragment_test)

        // 1. DialogFragmentを利用してダイアログを表示できるか。
        // ・可能でした。
        displayButton = findViewById(R.id.displayButton)
        displayButton.setOnClickListener(this)
    }

    override fun onClick(view: View){
        when (view.id) {
            R.id.displayButton -> {
                val dialogFragment = DialogFragmentTestFragment()
                dialogFragment.listener = this
                dialogFragment.show(supportFragmentManager, "dialog_fragment_test_dialog")
            }
        }
    }

    // 2. DialogFragmentからActivityへ入力内容を共有できるか。
    // ・可能でした。
    override fun onDialogPositive(dialog: DialogFragment) {
        Log.d("Dialog表示(Activity)", "OKボタン押下")
    }

    override fun onDialogNegative(dialog: DialogFragment) {
        Log.d("Dialog表示(Activity)", "キャンセルボタン押下")
    }

    override fun onDialogNeutral(dialog: DialogFragment) {
        Log.d("Dialog表示(Activity)", "あとでボタン押下")
    }
}
activity_dialog_fragment_test.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginStart="23dp"
        android:layout_marginEnd="23dp"
        android:layout_marginTop="23dp"
        android:layout_marginBottom="23dp"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:orientation="horizontal"
            tools:ignore="UselessParent">

            <Button
                android:id="@+id/displayButton"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="画面遷移"
                tools:ignore="HardcodedText" />

            <Space
                android:layout_width="30dp"
                android:layout_height="match_parent" />

        </LinearLayout>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
DialogFragmentTestFragment.kt
class DialogFragmentTestFragment: DialogFragment() {
    interface DialogListener {
        fun onDialogPositive(dialog: DialogFragment)
        fun onDialogNegative(dialog: DialogFragment)
        fun onDialogNeutral(dialog: DialogFragment)
    }

    var listener: DialogListener? = null

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = AlertDialog.Builder(activity)
        builder.setTitle("タイトル!")
            .setMessage("ダイアログのメッセージです。")
            .setPositiveButton("OK") { _, _ ->
                listener?.onDialogPositive(this)
                Log.d("Dialog表示", "OKボタン押下")
            }
            .setNegativeButton("キャンセル") { _, _ ->
                listener?.onDialogNegative(this)
                Log.d("Dialog表示", "キャンセルボタン押下")
            }
            .setNeutralButton("あとで") { _, _ ->
                listener?.onDialogNeutral(this)
                Log.d("Dialog表示", "あとでボタン押下")
            }

        return builder.create()
    }

//    override fun onAttach(context: Context) {
//        super.onAttach(context)
//        try {
//            listener = context as DialogListener
//        }catch (e: Exception){
//            Log.e("Dialog表示","ダイアログの表示に失敗しました。")
//        }
//    }
//
//    override fun onDetach() {
//        super.onDetach()
//        listener = null
//    }
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0