Aks*_*ngh 2 android android-dialogfragment kotlin
我正在调用一个带有参数的对话框,如下所示:
MyDialog("title", "message").show(this@MyActivity.supportFragmentManager, null)
Run Code Online (Sandbox Code Playgroud)
这是我的对话类:
class MyDialog(private val theTitle: String, private val theMessage: String) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity.let {
val myBuilder = AlertDialog.Builder(it)
myBuilder
.setTitle(theTitle)
.setMessage(theMessage)
.setPositiveButton("OK") { _, _ -> }
myBuilder.create()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当设备的方向在旋转时发生变化时,应用程序将停止工作。如果没有传递参数,则不会发生这种情况。那么,如何传递参数以及这样做的最佳方法是什么?
使用 kotlin 的完整解决方案
第 1 步:创建您的课程,如下所示
class MyDialog : DialogFragment() {
private var title: String? = null
private var message: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
title = it.getString(ARG_TITLE)
message = it.getString(ARG_MESSAGE)
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity.let {
val myBuilder = AlertDialog.Builder(it)
myBuilder
.setTitle(title)
.setMessage(message)
.setPositiveButton("OK") { _, _ -> }
myBuilder.create()
}
}
companion object {
const val TAG = "myDialog"
private const val ARG_TITLE = "argTitle"
private const val ARG_MESSAGE = "argMessage"
fun newInstance(title: String, message: String) = MyDialog().apply {
arguments = Bundle().apply {
putString(ARG_TITLE, title)
putString(ARG_MESSAGE, message)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
步骤 2.创建实例并显示
MyDialog.newInstance("title", "message").show(this@MyActivity.supportFragmentManager, MyDialog.TAG)
Run Code Online (Sandbox Code Playgroud)
就这样了!
如果它是一个片段,那么应该总是有一个可用的默认构造函数。单独传递参数将确保参数在片段的状态更改中保留
因此有一个方法 setArgument(Bundle) 您可以在其中传递参数。所以在这里你的电话应该改写为
class MyDialog: DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity.let {
val arg = arguments
// Use the parameters by accessing the key from variable "arg"
val myBuilder = AlertDialog.Builder(it)
myBuilder
.setTitle(theTitle)
.setMessage(theMessage)
.setPositiveButton("OK") { _, _ -> }
myBuilder.create()
}
}
}
Run Code Online (Sandbox Code Playgroud)
你这样称呼你 Dialog:
val d = MyDialog()
val b = Bundle()
b.putInt("KEY1",1)
d.arguments = b
d.show(FragmentManager,Tag)
Run Code Online (Sandbox Code Playgroud)
对于任何片段总是记得使用参数来传递数据
| 归档时间: |
|
| 查看次数: |
3935 次 |
| 最近记录: |