如何在 androidx.appcompat 中创建 AlertDialog

Mor*_*zov 5 android android-alertdialog kotlin androidx

有下一个导入:

import androidx.appcompat.app.AlertDialog
Run Code Online (Sandbox Code Playgroud)

并创建对话框如下:

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val adb = AlertDialog.Builder(activity!!)
                .setTitle(R.string.actions_rename_connection)
                .setPositiveButton(R.string.actions_ok, this)
                .setNegativeButton(R.string.actions_cancel, this)
        val view = LayoutInflater.from(activity).inflate(R.layout.dialog_edit_name, null)
        val dialog = adb.setView(view).create()
        dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
        return dialog
    }
Run Code Online (Sandbox Code Playgroud)

但我并不满意activity!!

例如,使用另一个导入我创建对话框如下:

import android.app.AlertDialog

 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return AlertDialog.Builder(activity, R.style.MaterialThemeDialog)
                .setTitle(R.string.in_app_settings_language)
                .setPositiveButton(R.string.actions_ok) { _, _ -> presenterContract.onOkClick() }
                .setNegativeButton(R.string.actions_cancel) { _, _ -> closeView() }
                .create()
    }
Run Code Online (Sandbox Code Playgroud)

问:我们可以activity在 androidx 中使用一些解决方案吗?

Caf*_*han 4

android.app.AlertDialog使用 @Nullable 活动。IDE 并不因为这个原因而生气使用 Activity。

androidx.appcompat.app.AlertDialog使用 @NonNull 活动。你应该使用!或空检查活动

我认为你应该这样使用它

activity?.let {
                AlertDialog.Builder(it, R.style.MaterialThemeDialog)
                .setTitle(R.string.in_app_settings_language)
                .setPositiveButton(R.string.actions_ok) { _, _ -> presenterContract.onOkClick() }
                .setNegativeButton(R.string.actions_cancel) { _, _ -> closeView() }
                .create()   
}
Run Code Online (Sandbox Code Playgroud)