Kotlin自定义对话框

时间:2018-06-06 08:49:36

标签: android kotlin dialog

我是kotlin的新手,在我的应用程序中,我想创建一个自定义对话框。我想展示一个共同的对话框。当我打电话给我的对话时,

 InfoMessageDialog(activity, "Test Title", "Test desctiption of the dialog.").show();

我收到错误,

FATAL EXCEPTION: main
Process: com.bmates.testApp, PID: 4350
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
    at com.bmates.testApp.Dialogs.InfoMessageDialog.onCreate(Unknown Source:4)
    at android.app.Dialog.dispatchOnCreate(Dialog.java:413)
    at android.app.Dialog.show(Dialog.java:308)
    at com.bmates.testApp.Fragments.HomeFragment.writeReviewClick$app_debug(HomeFragment.kt:143)
    at com.bmates.testApp.Fragments.HomeFragment_ViewBinding$3.doClick(HomeFragment_ViewBinding.java:61)
    at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
    at android.view.View.performClick(View.java:6320)
    at android.view.View$PerformClick.run(View.java:25087)
    at android.os.Handler.handleCallback(Handler.java:869)
    at android.os.Handler.dispatchMessage(Handler.java:101)
    at android.os.Looper.loop(Looper.java:206)
    at android.app.ActivityThread.main(ActivityThread.java:6733)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:845)

这是我的kotlin代码,

class InfoMessageDialog(context: Context, private var title : String, private var message : String)  : Dialog(context) {

    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        requestWindowFeature(Window.FEATURE_NO_TITLE)
        setContentView(R.layout.info_dialog)
        window!!.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT)
        setCanceledOnTouchOutside(true)

        var txtTitle = findViewById<TextView>(R.id.txtTitle)
        var txtMessage  = findViewById<TextView>(R.id.txtMessage)
        var btnOK  = findViewById<Button>(R.id.btnOK)

        txtTitle.setText(title)
        txtMessage.setText(message)

        btnOK.setOnClickListener(View.OnClickListener {
            dismiss()
        })
    }


}

1 个答案:

答案 0 :(得分:7)

默认情况下,Kotlin中的参数不为空。如果您的参数可以为null,那么您应该将?添加到其类型中。

根据您的例外情况

  

java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数savedInstanceState

savedInstanceState为空。使用以下方法进行纠正。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    ...