[英]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.