diadia

興味があることをやってみる。自分のメモを残しておきます。

Android Kotlin ダイアログを実装する

ダイアログを実装する手続き

ダイアログの基礎知識

ダイアログ  |  Android デベロッパー  |  Android Developers

ダイアログを利用する場合には、基本的にAlertDialog, DatePickerDialog, TimePickerDialogを使い実装する。

ダイアログをそのまま継承して作成するのではなく、DialogFragmentクラスを継承し、onCreateDialogメソッドをオーバーライドしてDialogをビルドする手続きとなる。

アラートダイアログの構成要素

  • タイトル
  • コンテンツエリア
  • アクションボタン

ダイアログを描画する手順

  • ダイアログを表示するするためのダイアログフラグメントのクラスを定義する。
  • ダイアログを現アクティビティで生成し、表示する

その他の方法として、作成したレイアウトファイルをダイアログとして表示する方法も存在する。

CustomLayout

ダイアログフラグメントのクラスの定義

ここで記述するクラスをインスタンス化すると、そのまま画面に描画される。 言わばダイアログフラグメントクラスの継承は、ダイアログの設計と同じ意味を持つ。

package com.example.accountmanager_test

import android.app.Activity
import android.app.AlertDialog
import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle
import androidx.fragment.app.DialogFragment

//ダイアログフラグメントクラスを継承する
class SelectUserDialogFragment:DialogFragment(){
    //ダイアログの設計はonCreateDialogメソッドをオーバーライドする
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = AlertDialog.Builder(activity)
        //タイトルの設定
        builder.setTitle("ログインするユーザーを選んでください")
        //ログインボタンの設定
        builder.setPositiveButton("Log in this user", DialogButtonClickListener())
        val dialog = builder.create()
        return dialog
    }

    private inner class DialogButtonClickListener:DialogInterface.OnClickListener{
        override fun onClick(dialog: DialogInterface?, which: Int) {
            println("ダイアログのtest")
        }
    }
}

ダイアログを現アクティビティで生成し、表示する

ダイアログを描画するのは、ダイアログフラグメントインスタンスを生成し、show()メソッドを使うだけで良い。

//ダイアログフラグメントを表示させるだけ
val testDialog = TestDialogFragment()
testDialog.show(supportFragmentManager, "タグの内容は適当に... どんな意味があるのかまだわかっていない。")

基本的にボタン等をタップしてonClickListenerやonItemClickListenerでダイアログフラグメントオブジェクトを生成し、表示するロジックを記述する使い方をする。

val btn = findViewById<Button>(R.id.btn_dialog)
btn.setOnClickListener{

//ダイアログフラグメントオブジェクトを生成
val testDialog = TestDialogFragment()

testDialog.show(supportFragmentManager, "TestDialogFragment")
}

ダイアログ実装サンプル

Kotlin android ラジオボタンタイプのDialogを実装する