2012-05-16 4 views

답변

1

당신이 중 하나를 다시 읽어 Activity.onResume()의 모든 환경 설정을하거나 한 주요 활동 (메뉴에서, 예를 들어) 환경 설정 활동을 시작으로, 당신은 startActivityForResult(Intent, int)와 함께 시작할 수 onActivityResult(int, int, Intent)의 모든 기본 설정을 다시 읽을 수 있습니다.

적절한 동작을 시작하기 전에 (예 : Notification을 실행하기 전에) 각 관련 환경 설정을 다시 한 번 확인하는 것으로 충분했습니다.

1

onSharedPreferenceChangeListener 인터페이스를 구현해야합니다.

@Override 
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
if (key.equals("MyKey")) { 
    // Do something. 
} else if (key.equals("MyOtherKey")) { 
    // Do something else. 
     } 
} 

가 중지시 /들의 OnDestroy에서 리스너를 제거해야합니다 : 당신은 같은 것을 할 리스너에서

myPreferences.registerOnSharedPreferenceChangeListener(); 

: 그런 다음에서 onCreate/ONSTART에 변경 업데이트를 받기 위해 등록합니다.

+0

registerOnSharedPreferenceChangeListener()를 시도했지만 작동하지 않습니다. 기본적으로 환경 설정 확인란이 true로 설정되어 있으므로 사용자가 서비스를 변경하려고 할 때 서비스 작동을 중지 하시겠습니까? – Wolf87

+0

기본값은 어디에 설정합니까? 나는 'PreferenceManager.setDefaultValues ​​(this, R.xml.preferences, false)'를 사용합니다. setDefaultValues ​​및 registerOnSharedPreferenceChangeListener는 모두 내 서비스 내에서 발생합니다. 변경시 귀하의 서비스가 작동하고 있습니까? – jsmith

+0

나는 [여기] (http://stackoverflow.com/questions/2542938/sharedpreferences-onsharedpreferencechangelistener-not-being-called-consistently/3104265#3104265)의 해결책을 찾았습니다. – Wolf87

0

기본 설정이 변경되거나 기본 설정 활동이 시작될 때마다 변경되는 정적 부울을 만들 수 있습니다. 이 부울의 목적은 기본 활동이 환경 설정이 더럽고 다시로드해야한다는 것을 알리는 것입니다. mDirty 플래그가 참이면 다시로드해야합니다 (onResume).

또 다른 옵션은 관계없이 모든 기본 설정 onResume을 다시로드하는 것입니다. 이것은 효율적이지 않을 수도 있지만, 많은 선호도가 없다면 괜찮습니다.

가장 효율적인 방법은 prefs 활동의 모든 prefs에 대해 onPreferenceChanged 리스너를 설정하는 것입니다. 그러면 환경 설정은 실제로 변경 될 때만 활동에 통지합니다. 이것은 사용자가 prefs 활동을 입력했지만 실제로 아무것도 변경하지 않는 경우를 해결합니다.

관련 문제