首页 > 解决方案 > 如何在 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")!!.

有没有办法解决?

标签: androidxmlkotlin

解决方案


preference_gender.xml根本没有Preference钥匙。样式化的RadioGroup& 3RadioButton可能更适合表示单个Preference键下方的那些按钮;可能会被渲染的类似节点AppCompatTextView- 但不会被同等对待Preference


推荐阅读