簡體   English   中英

在 kotlin 的 android 中創建對話框的好方法是什么?

[英]What is a good way of creating dialog in android in kotlin?

我有一個 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。 我很難從例子中理解它。

編輯:Anko 現在已棄用,請閱讀此內容

如果您正在使用 Kotlin, Anko 庫可能會讓您感興趣。 它提供了一種創建警報、對話框和其他常見任務的簡單方法。

Anko 是一個 Kotlin 庫,它使 Android 應用程序開發更快更容易。 它使您的代碼干凈且易於閱讀,並讓您忘記 Android SDK for 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"

確保在項目級別的 gradle 文件中有 $anko_version 變量:

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。

創建DialogFragment的子類並覆蓋onCreateDialog()以返回您的AlertDialog ,例如只需將您的myDialog代碼向上移動到myBuilder.create()那里。

當你想顯示你的DialogFragment ,實例化它並調用它的 show ,傳遞對片段管理器的引用和一個(可選)標簽。 例如:

MyDialogFragment().show(requireFragmentManager(), null)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM