У меня есть 2 настройки в моих настройках: 1- PreferenceCategory 2-PreferenceX Когда я нажимаю PreferenceX, я добавляю новые настройки во время выполнения в PreferenceCategory. Но когда я поворачиваю устройство или убиваю приложение, снова заново его открываем: Я не могу найти все новые настройки, которые у меня есть во время выполнения. Я попытался использовать saveHierarchyState & restoreHierarchyState для данной preferenceCategory, но все еще не могу заставить его работать.Android runtime Предпочтения теряются при повороте устройства
Вот пример моего кода:
мой файл preferences.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="myCat"
android:title="Example list"
android:summary="This list is empty by default" />
<Preference
android:key="button"
android:title="Example button"
android:summary="When clicked this adds an item to the list" />
</PreferenceScreen>
Вот мой MainActivity код:
package com.example.testpreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceGroup;
public class MainActivity extends PreferenceActivity {
private int counter=0;
private PreferenceGroup pg;
/** Called when the activity is first created. */
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
pg = (PreferenceGroup) getPreferenceScreen().findPreference("myCat");
getPreferenceScreen().findPreference("button").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference a_preference) {
Preference preference = new Preference(getApplicationContext());
preference.setTitle("Item" + counter);
preference.setKey("key"+counter);
counter++;
pg.addPreference(preference);
return true;
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
pg.saveHierarchyState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
if (null != state) {
pg.restoreHierarchyState(state);
}else
super.onRestoreInstanceState(state);
}
}
Попробуйте повернуть устройство и вы неправильное поведение, которое я описываю. Как сохранить новые настройки, которые добавляются во время выполнения, отображаться при повороте экрана?
Спасибо за ваш ответ, я добавил код onPause в код выше, но он не работает, когда я поворачиваю устройство, я все еще не вижу новых добавленных настроек , Более того, согласно моему первому коду, метод onSaveInstanceState был вызван обычно после перераспределения активности. –
Спасибо за ваше обновление. Я принял ваше предлагаемое альтернативное решение, и он отлично работает со мной. Для стиля ошибки, о котором вы упомянули, мне удалось исправить его, изменив контекст, который используется при восстановлении в mehtod Load, чтобы быть предпочтительным = new Preference (this); Пожалуйста, отредактируйте свой ответ соответственно, чтобы я мог проверить его как правильный ответ, и я думаю, что в вашем ответе нет необходимости в первой части, так как это очень запутанно. –
Благодарим вас за ваши комментарии. Я обновил свой ответ. – Toris