android - 如何在 androidx.appcompat 中创建 AlertDialog

标签 android kotlin android-alertdialog androidx

进行下一次导入:

import androidx.appcompat.app.AlertDialog

并创建对话框如下:

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
    }

但是我对 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()
    }

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

最佳答案

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

但是

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

我认为你应该这样使用它

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()   
}

关于android - 如何在 androidx.appcompat 中创建 AlertDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56168026/

相关文章:

android - 使用 DownloadManager 将数据从 Activity 传递到 BroadcastReceiver

Android 内容 Uri 格式

android - android 中的 setOnLongClickListener 与 kotlin

android - 在 RecyclerView 的 onBindViewHolder 中调用的自定义对话框按钮

android - 如何从 Android Studio 中的 Assets 中读取文本文件?

android - 使用 Nexus 10 在 Android 4.3 上滚动时性能不佳

android - Kotlin 看不懂 ViewModelProviders.of(activity ? : fragment)

android - 如何使用数据绑定(bind)设置单击监听器并将edittext字段值传递给 View 模型

android - 如何更新警报对话框的状态多选项目

java - 如何在自定义android对话框中设置按钮?