Что такое хороший способ создания диалога в Android в Kotlin? - PullRequest
0 голосов
/ 10 июня 2019

У меня есть SettingsActivity.kt следующим образом:

class SettingsActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setLayout()
        setListeners()

    }

    private fun setLayout() {/* fun to set layout* /}
    private fun setListeners() {
        val day = findViewById<LinearLayout>(R.id.settings_day)
        day.setOnClickListener { myDialog() }

        /* some other dialogs created in similar way */
    }

    private fun myDialog() {
        val prefs = getSharedPreferences("SETTINGS", Context.MODE_PRIVATE)
        var selectedDay = prefs.getInt("day", 1)

        val myBuilder = AlertDialog.Builder(this)
        myBuilder
            .setTitle(R.string.settings_day)
            .setSingleChoiceItems(R.array.days, selectedDay) { _, which ->
                selectedDay = which
            }
            .setPositiveButton(R.string.dialog_ok) { _, _ ->
                val editor = prefs.edit()
                editor
                    .putInt("day", selectedDay)
                    .apply()
            }
            .setNegativeButton(R.string.dialog_cancel) { _, _ -> /* do nothing */ } 

        val theDialog = myBuilder.create()
        theDialog.show()
    }
}

При изменении ориентации устройства диалоговое окно исчезает.

Я думаю, что должен использовать DialogFragment, но у меня есть некоторые проблемы, Официальный справочник на https://developer.android.com/guide/topics/ui/dialogs#kotlin мало что объясняет. Я запутался, где разместить код.

Большинство руководств по DialogFragment предназначены либо для пользовательского макета, либо для Java.

Так, может кто-нибудь сказать мне, как конвертировать мой код чтобы использовать DialogFragment. Мне трудно понять это из примеров.

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Если вы работаете с Kotlin, библиотека Anko может вас заинтересовать. Он предоставляет простой способ создания оповещений, диалогов и других распространенных задач.

Anko - это библиотека Kotlin, которая делает разработку приложений для Android быстрее и проще. Он делает ваш код чистым и легким для чтения, а также позволяет забыть о неровностях Android SDK для Java.

1- Добавление Anko в ваш проект

Чтобы добавить Anko в свой проект Android Kotlin, добавьте зависимость в свой файл Gradle

dependencies {
    implementation "org.jetbrains.anko:anko:$anko_version"
}

(Если вы хотите использовать его только для создания диалогов, просто добавьте anko-commons):

implementation "org.jetbrains.anko:anko-commons:$anko_version"

Убедитесь, что у вас установлен $ anko_version в файле Gradle на уровне проекта:

ext.anko_version='0.10.8'

2- Использование Anko для создания оповещения / диалога

Простой пример:

alert { title = "Your Title goes here!"

        customView {
            val nameInput = editText() {hint = "Name?"}

            positiveButton("OK!") {
                if( checkUser(nameInput.text) ) {
                  sayHelloTo(nameInput.text)
                }
            }

            negativeButton("ABORT!") { /* do nothing */ }
        }

  }.show()

Пожалуйста, прочитайте Документация Anko - диалоги , чтобы узнать, как использовать Anko.

1 голос
/ 10 июня 2019

Создайте подкласс DialogFragment и переопределите onCreateDialog(), чтобы вернуть AlertDialog, например, просто переместите свой код myDialog на myBuilder.create().

Когда вы хотите отобразить свой DialogFragment, создайте его экземпляр и вызовите show, передав ссылку на менеджер фрагментов и (необязательный) тег.Например:

MyDialogFragment().show(requireFragmentManager(), null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...