Kotlin自定义对话框参数指定为非null

时间:2017-06-17 11:37:22

标签: android kotlin kotlin-android-extensions

我收到了这个错误:

  

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

当我试图在Kotlin中夸大自定义对话框时 ,我在对话框中的super.onCreate行上得到了我上面写的错误。

对话框代码为:

class Custom_Dialog_Exit_App(var activity: Activity)// TODO Auto-generated constructor stub
    : Dialog(activity, R.style.full_screen_dialog) {

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

        initView()
    }

    fun initView() {
        initClicks()
    }

    fun initClicks() {


    }


}

,init是:

val omer = Custom_Dialog_Exit_App(this@MainActivity)
        omer.show()

请帮忙

3 个答案:

答案 0 :(得分:22)

override fun onCreate(savedInstanceState: Bundle) {

由于savedInstanceState可以是null,因此类型必须为Bundle?

当您指定参数不为null时,kotlin会在所有情况下生成检查。这包括在实现Java接口时,因此您需要注意使可为空的参数非空。

答案 1 :(得分:6)

我也遇到了错误,我将类型Bundle更改为"Bundle?"。然后它适用于我。在Kotlin中,您必须指定变量/参数是否为空。

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

答案 2 :(得分:-2)

更改此行

  activity.window!!.setLayout(WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT)

if(activity.window != null) { 
     activity.window!!.setLayout(WindowManager.LayoutParams.MATCH_PARENT,
               WindowManager.LayoutParams.MATCH_PARENT) 
} else {
     Log.e(TAG, "Window is null");
}