android - 如何在 PreferenceFragment 之外修改 Androidx Preference 数据?
问题描述
我正在尝试实现自定义 Radio 样式Preference
,用户可以在其中单击一个选项,然后将其分配为的新值Preference
:
这是我的布局:
首选项.xml
<Preference
android:layout="@layout/preference_gender"
android:key="seeking"
android:title="Seeking"/>
偏好性别.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")!!
.
有没有办法解决?
解决方案
preference_gender.xml
根本没有Preference
钥匙。样式化的RadioGroup
& 3RadioButton
可能更适合表示单个Preference
键下方的那些按钮;可能会被渲染的类似节点AppCompatTextView
- 但不会被同等对待Preference
。
推荐阅读
- c - 为什么我在插入 ';' 之类的内容时会出现错误 还是 Plindrome 程序中的“&”?
- java - 反序列化复杂的json主体,验证其中的一个元素,然后通过它映射到另一个元素(JAVA)是否可能?
- python - Python:嵌套字典问题:尝试运行“if”命令来打印字符串
- python-3.x - 从两个组合迭代器中获取前 N 个项目?
- linux - Ubuntu lm-sensors:英特尔酷睿 i7 上的大瞬时温度跳跃
- android - Android构建apk无效的代码长度集
- python - 有没有办法从 python 中的字典中的键值对创建字符串?
- java - 使用枚举创建安全工厂实例
- npm - 通过 npm 卸载 quasar-cli 不起作用?
- asp.net-core - EF Core 3.1 如何包含拥有实体的嵌套属性