Я подготовил a simple test case at GitHub по моему вопросу и чувствую, что для его работы осталось всего несколько строк кода.PreferenceFragment не сохраняет значения - с тестовым футляром и скриншотом
В Android приложения У меня есть 1 активность (MainActivity.java) и 2 фрагмента (MainFragment.java и PrefFragment.java) - и при изменении значения в фрагменте предпочтений, они не сохраняются.
также значения по умолчанию не загружаются и резюме не обновляется:
Вот мой PrefFragment где я зарегистрировать общий PREFS слушателя - для того, чтобы обновить резюме - но для некоторых причина это никогда не называют:
public class PrefFragment extends PreferenceFragment
implements OnSharedPreferenceChangeListener {
public static final String BOOL_1 = "bool_1";
public static final String STR_1 = "str_1";
public static final String STR_2 = "str_2";
private CheckBoxPreference mBool1;
private EditTextPreference mStr1;
private EditTextPreference mStr2;
private SharedPreferences mPrefs;
private Editor mEditor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(false);
addPreferencesFromResource(R.xml.preferences);
mBool1 = (CheckBoxPreference) findPreference(BOOL_1);
mStr1 = (EditTextPreference) findPreference(STR_1);
mStr2 = (EditTextPreference) findPreference(STR_2);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mPrefs = PreferenceManager.getDefaultSharedPreferences(activity);
mEditor = mPrefs.edit();
mPrefs.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onDetach() {
super.onDetach();
mPrefs.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs,
String key) {
Log.d("onSharedPreferenceChanged", key); // XXX is never called
if (BOOL_1.equals(key)) {
boolean bool1 = prefs.getBoolean(key, false);
mBool1.setSummary(bool1 ? "Enabled" : "Disabled");
} else if (STR_1.equals(key)) {
String str1 = prefs.getString(key, "");
mStr1.setSummary(str1);
} else if (STR_2.equals(key)) {
String str2 = prefs.getString(key, "");
mStr2.setSummary(str2);
}
}
}
А вот preference.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory
android:title="Category 1"
android:key="category_1">
<CheckBoxPreference
android:key="bool_1"
android:title="Boolean 1"
android:summary="XXX how to set this? XXX"
android:defaultValue="false" />
<EditTextPreference
android:dependency="bool_1"
android:key="str_1"
android:title="String 1"
android:summary="XXX how to set this? XXX"
android:defaultValue="change me" />
<EditTextPreference
android:dependency="bool_1"
android:key="str_2"
android:title="String 2"
android:summary="XXX how to set this? XXX"
android:defaultValue="change me too" />
</PreferenceCategory>
</PreferenceScreen>
Так что мой вопрос в том, как обрабатывать (загружать, сохранять) значения в PreferenceFragment? Мне действительно нужно расширить EditTextPreference и реализовать метод onDialogClosed
в моем классе? Мне кажется, что это слишком тяжелый подход.