我正在尝试实现自定义的Radio样式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
内部的特定点击(仅从整体上来说是首选项),因此我在xml中添加了一个onClick()
函数,然后传递给我的活动:
然后显示我的首选项片段:
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")!!
。
有什么办法解决吗?
答案 0 :(得分:0)
preference_gender.xml
根本没有Preference
键。样式为RadioGroup
和3 RadioButton
的样式可能更适合于表示单个Preference
键下方的那些按钮;像AppCompatTextView
这样的节点可能会被渲染-但不会像Preference
那样被对待。