Как я могу заставить CheckBoxes работать в AlertDialog, используя Kotlin?(Android Studio) - PullRequest
0 голосов
/ 24 мая 2018

Так что я работал над этим весь день, и несмотря ни на что, я продолжаю получать нулевой указатель на свой CheckBox.Я пытаюсь создать AlertDialog, который имеет список фильтров для сохранения с помощью SharedPreferences.Диалог будет содержать как флажки, так и несколько сборщиков номеров.Я искал ответы переполнения стека в течение многих часов, и я нашел несколько Java-решений по использованию OnClickListener в .setPositiveButton диалогового окна.Эти решения, похоже, не работают в Kotlin.

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()
    })
}

Это то, что у меня есть в настоящее время, но я получаю сообщение об ошибке

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)

Я целый день тестировал разные решенияно я в своем уме.Если у кого-нибудь есть какие-либо советы по этому поводу, мы будем очень признательны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...