【Android,Kotlin】リストのダイアログ表示

Androidでダイアログを表示する方法です。

新規にDialogFragmentを継承したクラスを作り、呼び出すことでダイアログを表示できます。

ダイアログ実行画面(Android12)

ダイアログに受け取った引数を表示するようにします。

package com.atmc118.wifiscanner

import android.app.AlertDialog
import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment

class StartGameDialogFragment : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return activity?.let {
            // Use the Builder class for convenient dialog construction

            val builder = AlertDialog.Builder(it)

            val mArgs = arguments
            val ssid = mArgs!!.getString("ssid")
            val ip = mArgs.getInt("ip")
            val standard = mArgs.getInt("standard")
            val addressStr = arrayOf<Int>(ip,ip shr 8,ip shr 16,ip shr 24).map{it and 0xff}.joinToString(".")
            builder.setTitle("接続中のWifi情報")
                .setItems(arrayOf("SSID: $ssid", "IPアドレス: $addressStr","規格: "+getStandard(standard))
                ) { dialog, which ->
                    // The 'which' argument contains the index position
                    // of the selected item
                }
            // Create the AlertDialog object and return it
            builder.create()
        } ?: throw IllegalStateException("Activity cannot be null")
    }

}

setItemsで配列を渡すことでリスト形式でダイアログを表示します。

呼び出し側のコードです。

Acitivityなどダイアログを表示したい箇所に挿入します。

            val args = Bundle()
            args.putString("ssid", connectInfo.ssid)
            args.putInt("ip", connectInfo.ipAddress)
            args.putInt("standard", connectInfo.wifiStandard)
            val manager: FragmentManager = supportFragmentManager
            val frag = StartGameDialogFragment()
            frag.arguments = args
            frag.show(manager,"Tag")

ラジオボタンやチェックボックスも付けることができるようです。詳しくはAndroid開発者サイトをご覧ください。

https://developer.android.com/guide/topics/ui/dialogs?hl=ja