Programming

Android 환경 설정 : 사용자가 환경 설정 화면을 사용하지 않은 경우 기본값을로드하는 방법은 무엇입니까?

procodes 2020. 8. 3. 17:55
반응형

Android 환경 설정 : 사용자가 환경 설정 화면을 사용하지 않은 경우 기본값을로드하는 방법은 무엇입니까?


사용자가 일부 값을 설정할 수 있도록 PreferenceActivity를 사용하고 있습니다. 정의 된 환경 설정으로 xml 파일을 공급하고 있습니다.

나는 android:defaultValue=""그들을 위해 모든 것을 설정 했습니다.

응용 프로그램을 시작할 때 기본 설정이 필요하거나 아직 수동으로 설정하지 않은 경우 기본값을 원합니다.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false); 

그러나 android:defaultValue="true"여전히 그래도 얻을 수 false있습니다. 따라서 XML에 설정된 defaultValues는 환경 설정 화면을 초기화 할 때 어디에서나 사용되지 않는 것처럼 보입니다.

getBoolean()메소드 의 기본값을 하드 코딩하고 싶지 않습니다 . 그래서, 이것을 1 곳에서만 정의하여 기본값을 얻는 방법이 있습니까?


이 질문은 내 것과 비슷합니다.

기본 설정에서 XML로 기본 활동 초기화

이 코드를 onCreate메소드에 사용하십시오 .

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

XML에서 환경 설정을로드하고 마지막 매개 변수 ( readAgain)는 사용자 환경 설정을 덮어 쓰지 않도록합니다.

추가 조사를 위해 Android API에서 PreferenceManager.setDefaultValues살펴보십시오 .


사용중인 경우
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)

환경 설정을 검색하려면 기본값을 설정 해야합니다 !
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)

예를 들면 다음과 같습니다.
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);

이것이 누군가를 도울 수 있기를 바랍니다.


픽셀의 대답에서 :

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

그것은 것을 주장한다 false기본값을 덮어 쓸 수 없음을 의미합니다. 응용 프로그램에 둘 이상의 진입 점이있는 경우 구문 분석을 중지하는 효율성 플래그 일뿐입니다. 불행히도 환경 설정 파일마다 테스트가 수행되지 않으므로 둘 이상의 환경 설정 파일이 있으면 true첫 번째 파일 을 제외한 모든 코드를 작성해야합니다 .

효율성이 걱정된다면 다음과 같이 코딩 할 수 있습니다.

final static private int SPL = 1;
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (sp.getInt("spl", 0) != SPL)
{
    PreferenceManager.setDefaultValues(this, R.xml.prefs1, true);
    PreferenceManager.setDefaultValues(this, R.xml.prefs2, true);
    sp.edit().putInt("spl", SPL).apply();
}

공유 환경 설정을 더 추가하려면 SPL을 hight 숫자로 설정하십시오.


예를 들어 확장 DialogPreference하면 다음과 같습니다.

@Override
protected void onSetInitialValue(boolean restore, Object defaultValue) {
    super.onSetInitialValue(restore, defaultValue);

    if (restore) {
        mValue = shouldPersist() ? getPersistedString(mDefault) : mDefault;
    } else {
        mValue = mDefault;
    }
}

mDefault는 다음과 같습니다.

  • mContext.getResources (). getString (attrs.getAttributeResourceValue (androidns, "defaultValue", 100));
  • R에서 색인을 생성 한 것

Also make sure you have never used the SharedPreferences before. To make sure they are not changed (which means setDefaultValues(this,xml,false) has no effect) uninstall your App and upload it again to be sure no values are touched. This helped me.

참고URL : https://stackoverflow.com/questions/2691772/android-preferences-how-to-load-the-default-values-when-the-user-hasnt-used-th

반응형