如何在androidx.appcompat中创建AlertDialog

时间:2019-05-16 11:57:51

标签: android kotlin 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

1 个答案:

答案 0 :(得分:0)

android.app.AlertDialog 使用@Nullable活动。因此,IDE不会因使用活动而生气。

但是

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