8

, 일부 설정이 가능하게 변경 될 수 있으며, 내가 실행 해요 문제는 addPreferencesFromResourceonCreate에서 호출되는, 그래서 말 그런 다음 다른 화면으로 이동 한 다음 설정을 변경하는 항목을 수행 한 다음 뒤로 키를 눌러 PreferenceActivity으로 돌아 가면 레이아웃에서 특정 설정이 변경되지 않았습니다.새로 고침 환경 설정은 내 응용 프로그램에서

그래야 onResume (또는 onStart())을 레이아웃을 복제하지 않고 호출 할 때마다 Preferences을 다시로드 할 수 있습니까?

답변

3

편집 :이 솔루션은 API 11 이상에서만 작동합니다.

Im 확실하지 않음 문제를 완전히 이해하고 있지만 내 이해로 활동의 전체 수명주기를 다시 수행하는 활동의 onResume에 recreate()를 호출 할 수 있습니다.

실제로 더티 데이터가있을 때만이 작업을 수행 할 수 있도록, 활동을 onResume()에서 다시 작성해야한다는 것을 알 수있는 플래그를 SharedPreferences에 설정합니다.

public void onResume(){ 
      super.onResume(); 
      SharedPreferences pref = getApplicationContext().getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE); 
      if(pref.getBoolean("isDirtyPrefs", true)) 
       recreate(); 
     } 
+0

감사합니다. 아직 테스트하지는 않았지만 제대로 작동하는지 봅니다. PreferenceActivity 및 PreferenceManager에서 찾고 있던 recreate() 명령을 인식하지 못했습니다. 하지만 고마워, 내가 원한거야. – Jakar

+4

다시 작성 API lvl 11 – Blundell

+0

onResume이 라이프 사이클 프로세스에서 호출되고 개발자가 환경 설정을 설정하지 않았거나 없으면 반복해서 반복 할 수 있으므로 논리를 테스트하는 것이 좋습니다. 기본값은 true이고 루프입니다. –

1

나는 비슷한 문제가있었습니다. 내 PreferenceActivity를 자체를 새로 만들 수있는 간단한 방법을 찾기 위해 실패, 내 솔루션은 내 PreferenceActivity를이를 추가했다 : 이것은의 환경 설정을 된 SharedPreferences에서 시작되어 다음 번에 다시로드 화면의 원인이됩니다

/** 
* Called when activity leaves the foreground 
*/ 
protected void onStop() { 
    super.onStop(); 
    finish(); 
} 

. 말할 필요도없이이 방법은 뒤로 버튼을 사용하여 환경 설정 화면으로 돌아가고 싶다면 작동하지 않습니다.

+0

필자는 그것을 고려했지만,'PreferenceActivity'는 다른 Activity를 시작했고,'PreferenceActivity'를 다시 시작하기위한 활동에서'onKeyDown'과'onKeyUp'을 오버라이드하는 것은 너무 많은 번거 로움이었을 것입니다. 그래도 제안 해 주셔서 감사합니다. – Jakar