Android PreferenceScreen – могу ли я использовать его без сохранения настроек в SharedPreferences?

Я пытаюсь использовать Android PreferenceScreen в качестве удобного способа компоновки моих пользовательских настроек, но я не хочу сохранять настройки для общих настроек устройства. Возможно ли это, или я должен использовать другой механизм, такой как ListView ?

Кажется очень удобным использовать тип PreferenceScreen потому что мне нужны разные виджеты (т. Е. Переключатели, редактировать текст). Но я уже сталкиваюсь с проблемами настойчивости, т.е. Все, что я вхожу, сохраняется даже во время сеансов, когда я этого не хочу.

settings.xml:

 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Preference android:key="settings_type" android:title="@string/label_type" /> <EditTextPreference android:key="settings_edit_name" android:title="@string/label_name" android:dialogTitle="Enter a name" android:singleLine="true" /> <SwitchPreference android:key="settings_edit_state" android:title="@string/label_state" android:summary="Enable or disable the state" /> </PreferenceScreen> 

Вы можете просто использовать линейный макет и размещать в нем нестандартные версии компонентов.

Я знаю, что это старый вопрос, но я считаю это довольно интересным. Просто установите этот атрибут в соответствии с вашими предпочтениями, и он не будет сохранен:

 android:persistent="false" 

Я перечитал соответствующие документы и определил, как предотвратить сохранение настроек путем реализации интерфейса Preference.OnPreferenceChangeListener .

Открытый статический интерфейс Preference.OnPreferenceChangeListener

Определение интерфейса для обратного вызова, вызываемого, когда значение этого предпочтения было изменено пользователем и должно быть установлено и / или сохранено. Это дает клиенту возможность предотвратить установку и / или сохранение значения.

Пример:

 public class SettingsFragment extends PreferenceFragment { public static SettingsFragment newInstance(int index) { SettingsFragment f = new SettingsFragment(); Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.settings); // getArguments().getInt("index"); EditTextPreference namePreference = (EditTextPreference) findPreference("settings_edit_name"); namePreference.setOnPreferenceChangeListener(new NamePreferenceChangeListener()); } private class NamePreferenceChangeListener implements Preference.OnPreferenceChangeListener { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { // Do something else presumably and then return false to avoid saving the pref. return false; } } 

Поскольку настройки должны быть сохранены, вы всегда можете очистить их в onCreate

Попробуйте это в onCreate of PreferenceFragment

 super.onCreate(); getPreferenceManager().setSharedPreferencesName("custom"); SharedPreferences sp = getPreferenceManager().getSharedPreferences(); SharedPreferences.Editor editor = sp.edit(); editor.clear(); editor.apply();