rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

KotlinでのAlertDialog例 android開発

2020 May 30.
2020 Apr. 29.

表示中に画面回転すると破棄されるAlertDialog

カメラパーミッションを許可する時のAlertDialog例

private fun allowCameraPermission() {
    if (shouldShowRequestPermissionRationale( Manifest.permission.CAMERA )) {

        // ユーザーに許可が必要な理由を示すべき場合
        AlertDialog.Builder(this)
            .setTitle("パーミッションが必要な説明")
            .setMessage("このアプリにはカメラ利用許可が必要です")
            .setPositiveButton( android.R.string.ok, DialogInterface.OnClickListener { _, _ ->
                // OKのとき
                ActivityCompat.requestPermissions(
                    this,arrayOf(Manifest.permission.CAMERA),
                    REQUEST_CODE_CAMERA_PERMISSION)
                    })
            .create()
            .show()

    } else {
        ActivityCompat.requestPermissions(
            this,arrayOf(Manifest.permission.CAMERA),
            REQUEST_CODE_CAMERA_PERMISSION)
    }
}
画面回転しても破棄されないAlertDialog

参考元
 https://developer.android.com/guide/topics/ui/dialogs?hl=ja#java
 https://akira-watson.com/android/fragment-code.html

MainActivity.kt

package YOUR.PACKAGE.PROJECT

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val supportFragmentManager = getSupportFragmentManager()
        buttonShowDialog.setOnClickListener {
            val dialogFragment = AlertDialogFragment()
            dialogFragment.show(supportFragmentManager,"myDialog")
                // "myDialog" -> https://teratail.com/questions/88709
        }
    }
}


AlertDialogFragment.java

package YOUR.PACKAGE.PROJECT

import android.app.Dialog
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment
import kotlinx.android.synthetic.main.activity_main.*

class AlertDialogFragment : DialogFragment() {
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = AlertDialog.Builder(activity!!)
        builder.setMessage("MyMessage")
            .setPositiveButton("OK") { dialog, id ->
                activity!!.textViewShowResultDialog.setText(R.string.dialog_ok)
            }
            .setNegativeButton("Cancel") { dialog, id ->
                activity!!.textViewShowResultDialog.setText(R.string.dialog_cancel)
            }
        return builder.create()
    }
}