android 如何设置我从另一个活动/类创建的自定义对话框的文本

ruarlubt  于 2023-04-04  发布在  Android
关注(0)|答案(1)|浏览(110)

我为我的Kotlin应用程序创建了这个CustomDialog类:

class CustomDialog(private val context: Context) {
    private lateinit var dialog: Dialog

    lateinit var title: TextView
    lateinit var message: TextView

    fun show() {
        dialog = Dialog(context)
        dialog.setContentView(R.layout.dialog_custom)
        dialog.window?.setBackgroundDrawable(null)
        dialog.setCancelable(true)

        title = dialog.findViewById(R.id.custom_title)
        message = dialog.findViewById(R.id.custom_message)

        dialog.create()
        dialog.show()
    }
}

对于不同类型的对话框,它应该是一个虚拟的,因为我不想每次都用不同的xml创建一个新的对话框。问题是,当我调用.setText方法来设置我想要显示的字符串时,我要么在使用lateinit时得到一个UnitializedPropertyException,要么在将其初始化为null时得到一个NullPointer,我无法理解如何解决这个问题。
设置文本的方法只是一个onclicklistener,它尝试在标题和消息上使用.setText(),然后使用.show()。
我来自Java背景,适应Kotlin给我带来了一些这样的问题。希望有人能为我指出正确的方向,提前感谢!

bvk5enib

bvk5enib1#

您查看过此文档吗?https://developer.android.com/develop/ui/views/components/dialogs#kotlin
对于自定义构建,有DialogFragment类。
你可以使用以下代码来实现这一点:

CustomDialog(
    Configuration.build {
        customTitle = "Custom Title"
        customMessage = "Custom Message"
        customCancelable = false
    }
).show(supportFragmentManager, CustomDialog.TAG)

下面是带有构建器的CustomDialog类:

import android.app.Dialog
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment

class CustomDialog(private val configuration: Configuration) : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return activity?.let { it ->
            val builder = AlertDialog.Builder(it)

            configuration.customTitle?.let{ title ->
                builder.setTitle(title)
            }

            configuration.customMessage?.let{ message ->
                builder.setMessage(message)
            }

            builder.setCancelable(configuration.customCancelable)

            // TODO: ...

            builder.create()
        } ?: throw IllegalStateException("Activity cannot be null")
    }

    companion object {
        const val TAG = "CustomDialog"
    }

}

相关问题