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