Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Kotlin使复选框在AlertDialog中工作?(安卓工作室)_Android_Kotlin - Fatal编程技术网

Android 如何使用Kotlin使复选框在AlertDialog中工作?(安卓工作室)

Android 如何使用Kotlin使复选框在AlertDialog中工作?(安卓工作室),android,kotlin,Android,Kotlin,所以我整天都在做这个,不管怎样,我总是得到一个空指针指向我的复选框。我正在尝试创建一个AlertDialog,其中包含要使用SharedReferences保存的筛选器列表。该对话框将包含两个复选框以及两个数字选择器。我已经在Stack Overflow中搜索了好几个小时的答案,并且在对话框的.setPositiveButton中找到了一些使用OnClickListener的Java解决方案。不过,这些解决方案在科特林似乎不起作用 fab_filter_match.setOnClickListe

所以我整天都在做这个,不管怎样,我总是得到一个空指针指向我的复选框。我正在尝试创建一个AlertDialog,其中包含要使用SharedReferences保存的筛选器列表。该对话框将包含两个复选框以及两个数字选择器。我已经在Stack Overflow中搜索了好几个小时的答案,并且在对话框的.setPositiveButton中找到了一些使用OnClickListener的Java解决方案。不过,这些解决方案在科特林似乎不起作用

fab_filter_match.setOnClickListener({
        val matchSettingsDialog = AlertDialog.Builder(context)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            matchSettingsDialog.setView(R.layout.dialog_match_settings)
        }

        var matchGender = 0
        var minAge = 0
        var maxAge = 0
        var matchLanguage = arrayListOf<String>()

        matchSettingsDialog.setTitle("Match Settings")
                .setPositiveButton("Ok") { _, _ ->
                    var matchGender = 0
                    var minAge = 0
                    var maxAge = 0
                    var matchLanguage = arrayListOf<String>()

                    checkbox_male_match_settings.setOnClickListener({
                        isChecked -> matchGender += 1
                    })
                    checkbox_female_match_settings.setOnClickListener({
                        isChecked -> matchGender += 2
                    })
                    checkbox_other_match_settings.setOnClickListener({
                        isChecked -> matchGender += 4
                    })

                    // Get Gender Selection
                    if (checkbox_male_match_settings!!.isChecked) {
                        matchGender += 1
                    } else
                        matchGender += 0
                    if (checkbox_female_match_settings.isChecked) {
                        matchGender += 2
                    }
                    if (checkbox_other_match_settings.isChecked) {
                        matchGender += 4
                    }
                    if (!checkbox_male_match_settings.isChecked &&
                            !checkbox_female_match_settings.isChecked &&
                            !checkbox_other_match_settings.isChecked) {
                        matchGender = 7
                    }

                    // Get Age Selection

                    text_select_minAge_filter.setOnClickListener({
                        createNumberPicker(0)
                    })
                    text_select_maxAge_filter.setOnClickListener({
                        createNumberPicker(1)
                    })

                    minAge = text_select_minAge_filter.text.toString().toInt()
                    maxAge = text_select_maxAge_filter.text.toString().toInt()

                    // Get Language Selection

                    if (checkbox_english_match_settings.isChecked)
                        matchLanguage.add("English")
                    if (checkbox_swedish_match_settings.isChecked)
                        matchLanguage.add("Swedish")

                    editor.putInt("matchGender", matchGender)
                    editor.putInt("minAge", minAge)
                    editor.putInt("maxAge", maxAge)
                    editor.putStringSet("languages", matchLanguage as Set<String>)
                    editor.apply()

                    Toast.makeText(context, "Settings Changed", Toast.LENGTH_SHORT).show()
                }
                .setNegativeButton("Cancel") { _, _ ->
                    Toast.makeText(context, "Cancelled", Toast.LENGTH_SHORT).show()
                }
                .create()
                .show()
    })
}

我一整天都在测试不同的解决方案,但我已经束手无策了。如果有人对此有任何建议,我们将不胜感激。

您不能盲目使用Kotlin扩展视图。单击“确定”按钮试图在mainActivity中查找
复选框\u male\u match\u settings
(和其他设置),您需要获取引用以在AlertDialog中查看。只需澄清此对话框是从片段调用的。对话框视图也包含所有复选框。我想我明白你的意思,所以我会试试看。谢谢
Process: com.p.fiveminutefriend, PID: 12352
              java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CheckBox.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                  at com.p.fiveminutefriend.MainTabs.MatchFragment$onViewCreated$3$1.onClick(MatchFragment.kt:128)
                  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:177)
                  at android.os.Handler.dispatchMessage(Handler.java:105)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6938)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)