SharedPreferences
и Preference
- два очень разных класса. A SharedPreferences
- это одноэлементный объект, который позволяет вам взаимодействовать с файлом свойств, который содержит вашу карту данных настроек. Preference
- это виджет представления, который позволяет пользователю напрямую изменять SharedPreferences
.
То, что вы описываете, вы хотите сделать, так это изменить видимость или включенное состояние виджета Preference
s. Это вообще не будет включать SharedPreferences
.
Предположительно, у вас есть предпочтительные представления на экране в PreferenceFragmentCompat
, как объясняется в документации . Чтобы изменить конкретное представление c Preference
, вы используете findPreference()
в своем фрагменте. Вы можете указать более конкретный тип c, чем Preference
, если необходимо (при условии, что он соответствует типу фактического предпочтения в вашем XML, который вы ищете).
Тип возврата допускает значение NULL, поскольку возвращает значение NULL, если не находит его. Вы смотрите предпочтение, используя его ключ. Итак, чтобы сделать то, для чего, по-видимому, предназначен ваш опубликованный код, вы можете указать:
class MySettingsFragment: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, null)
findPreference<Preference>("hidepref")?.isVisible = false
findPreference<Preference>("disabledPref")?.isEnabled = false
}
}
Я лично решил поместить все свои ключи предпочтений в файл строковых ресурсов (и использовать tools:ignore="MissingTranslation"
в этом файл, чтобы линтер не жаловался). Таким образом буквальные строки ключей набираются только в одном месте, что уменьшает количество ошибок. Я пишу вспомогательные функции для получения этих значений предпочтений из SharedPreferences
или поиска Preference
представлений с использованием идентификатора ресурса.