Android 환경 설정 : 사용자가 환경 설정 화면을 사용하지 않은 경우 기본값을로드하는 방법은 무엇입니까?
사용자가 일부 값을 설정할 수 있도록 PreferenceActivity를 사용하고 있습니다. 정의 된 환경 설정으로 xml 파일을 공급하고 있습니다.
나는 android:defaultValue=""
그들을 위해 모든 것을 설정 했습니다.
응용 프로그램을 시작할 때 기본 설정이 필요하거나 아직 수동으로 설정하지 않은 경우 기본값을 원합니다.
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false);
그러나 android:defaultValue="true"
여전히 그래도 얻을 수 false
있습니다. 따라서 XML에 설정된 defaultValues는 환경 설정 화면을 초기화 할 때 어디에서나 사용되지 않는 것처럼 보입니다.
getBoolean()
메소드 의 기본값을 하드 코딩하고 싶지 않습니다 . 그래서, 이것을 1 곳에서만 정의하여 기본값을 얻는 방법이 있습니까?
이 질문은 내 것과 비슷합니다.
이 코드를 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.
'Programming' 카테고리의 다른 글
Tkinter의 이벤트 루프와 함께 자신의 코드를 어떻게 실행합니까? (0) | 2020.08.03 |
---|---|
Nullable Foreign Key 나쁜 습관? (0) | 2020.08.03 |
ViewModelLocator는 무엇이며 DataTemplate과 비교하여 장단점이 무엇입니까? (0) | 2020.08.03 |
정규식을 사용하여 HTML / XML을 구문 분석 할 수없는 이유 : 일반인 용어의 공식 설명 (0) | 2020.08.03 |
이 코드는 릴리스 모드에서 정지하지만 디버그 모드에서는 제대로 작동합니다. (0) | 2020.08.03 |