내 설정에 2 개의 환경 설정이 있습니다. 1- PreferenceCategory 2-PreferenceX PreferenceX를 누르면 런타임시 환경 설정에 PreferenceCategory에 새로운 환경 설정이 추가됩니다. 그러나 장치를 회전하거나 응용 프로그램을 종료 한 다음 다시 엽니 다. 런타임에 가지고있는 모든 새 환경 설정을 찾을 수 없습니다. 주어진 preferenceCategory에 대해 saveHierarchyState & restoreHierarchyState를 사용하려고했지만 여전히 작동하지 않습니다. 여기 Android 런타임 기기 회전시 환경 설정이 손실됩니다.
내 코드에 대한 샘플입니다내 preferences.xml로 파일 : 장치를 회전하고 뜻에
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);
}
}
시도 : 여기
<?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 코드 내가 묘사하고있는 잘못된 행동. 런타임시 추가되는 새 환경 설정을 화면 회전시 표시되도록하려면 어떻게해야합니까?
답변을 주셔서 감사합니다. 위 코드에 onPause 코드를 추가했지만 작동하지 않습니다. 장치를 회전해도 새로운 추가 환경 설정이 누락되었습니다. . 또한, 내 첫 번째 코드에 따르면, onSaveInstanceState 메서드는 정상적으로 다시 호출 할 때 호출되었습니다. –
업데이트 해 주셔서 감사합니다. 귀하가 제안한 대체 솔루션을 사용했기 때문에 나와 잘 작동합니다. 언급 한 버그 스타일에 대해, 나는 mehtod에서 복원하는 동안 사용 된 컨텍스트를 변경하여 문제를 해결했습니다. 기본 설정 = 새로운 기본 설정 (this); 그에 따라 답을 편집하여 정답으로 확인하고 매우 혼란 스럽기 때문에 답안의 첫 번째 부분은 필요 없다고 생각합니다. –
의견을 보내 주셔서 감사합니다. 내 대답을 업데이트했습니다. – Toris