Я пытаюсь реализовать пользовательский стиль радио Preference
, где пользователь может щелкнуть параметр, который затем назначается в качестве нового значения Preference
:
Вот мой макет:
preferences.xml
<Preference
android:layout="@layout/preference_gender"
android:key="seeking"
android:title="Seeking"/>
preference_gender.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout>
<RadioGroup
android:id="@+id/gender_group"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatTextView
...
android:text="@string/seeking"/>
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/male"
android:text="Male"
/>
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/female"
android:text="Female"
/>
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/both"
android:text="Both"
/>
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>
Поскольку Preference.OnPreferenceClickListener
не может обнаружить определенные клики внутри Preference
(только предпочтение в целом), я прибег к добавлению функции onClick()
в xml, которая затем передается моей деятельности:
тогда к моим предпочтениям фрагмент:
class PreferencesFragment : PreferenceFragmentCompat(), View.OnClickListener, RadioGroup.OnCheckedChangeListener {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
gender_group.setOnCheckedChangeListener(this) // null pointer exception
}
}
однако я получаю NullPointerException
на моем findPreference("seeking")!!
.
Есть ли способ обойти это?