我有一个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。 我很难从示例中理解它。
答案 0 :(得分:1)
创建DialogFragment
的子类并覆盖onCreateDialog()
以返回您的AlertDialog
,例如只需将您的myDialog
代码移到myBuilder.create()
。
如果要显示DialogFragment
,请实例化它并在其上调用show,同时传递对片段管理器的引用和(可选)标签。例如:
MyDialogFragment().show(requireFragmentManager(), null)
答案 1 :(得分:1)
如果您与Kotlin合作,Anko Library可能会让您感兴趣。它提供了一种创建警报,对话框和其他常见任务的简便方法。
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 Documentation - Dialogs,以了解如何使用Anko。