Как изменить данные предпочтения Androidx вне PreferenceFragment? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь реализовать пользовательский стиль радио Preference, где пользователь может щелкнуть параметр, который затем назначается в качестве нового значения Preference:

enter image description here

Вот мой макет:

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")!!.

Есть ли способ обойти это?

1 Ответ

0 голосов
/ 23 мая 2019

preference_gender.xml вообще не имеет ключей Preference. Стиль RadioGroup & 3 RadioButton может быть более подходящим для представления кнопок ниже одной клавиши Preference; узлы одинаково, что AppCompatTextView может быть визуализировано - но не будут обрабатываться так же, как Preference.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...