[英]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 的粗糙之處。
要將 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'
一個簡單的例子:
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.