Как создать AlertDialog в androidx.appcompat - PullRequest
2 голосов
/ 16 мая 2019

есть следующий импорт:

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

Q: есть некоторые решения, в которых мы можем использовать activity в androidx?

1 Ответ

1 голос
/ 16 мая 2019

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