2010-05-20 3 views
50

내 문제는 응용 프로그램을 시작하고 사용자가 내 PreferenceActivity을 열지 않았으므로 검색 할 때 내 preference.xml 파일에 정의 된 기본값을 얻지 못한다는 것입니다.기본 활동의 XML에서 환경 설정 초기화

preference.xml 파일 : 내 주요 활동 (onCreate 방법)에서

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="applicationPreference" android:title="@string/config" 
    > 
    <ListPreference 
      android:key="pref1" 
      android:defaultValue="default" 
      android:title="Title" 
      android:summary="Summary" 
      android:entries="@array/entry_names" 
      android:entryValues="@array/entry_values" 
      android:dialogTitle="@string/dialog_title" 
    />     
</PreferenceScreen> 

발췌문 : 결과에서

SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);   
    String pref1 = appPreferences.getString("pref1", null); 

은 내가 null 값으로 끝낸다.

답변

105

Activity에서 the PreferenceManager.setDefaultValues() method으로 전화하면됩니다.

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

그러면 preference.xml 파일을 읽고 여기에 정의 된 기본값을 설정합니다. 인수를 false으로 설정하면 이전에이 메소드를 호출하지 않은 경우에만 기본값을 설정하므로 Activity을 작성할 때마다 사용자 설정을 대체 할 필요가 없으므로 걱정할 필요가 없습니다.

+4

하지만 누구나이 참조 용 샘플 또는 템플릿을 참조 할 수 있습니까? –

+8

당신은 내 하루를 구했습니다! 3 시간 동안의 널 값을 찾고 있었는데, 밤에는 공항 테트링 무선 랜카드에서 3 시간을 보았습니다. 감사! – Cimm

+1

@Dave Webb 문자열 환경 설정에서 작동하지 않습니다. – Anderson

8

getString()으로 전화하면 null이 두 번째 매개 변수입니다. 이 값을 원하는 기본값으로 변경하십시오.

+6

이것은 매우 우아한 해결책입니다. +1. 그러나 OP가 원하는 것을 얻기 위해 PreferenceManager.setDefaultValues ​​()가 솔루션입니다. – ef2011

14

요약 해 드리겠습니다.

<string name="pref_mypref_key">mypref</string> 
<string name="pref_mypref_default">blah</string> 

preferences.xml로 : : : strings.xml의

은 (실제로 나는 환경에 대한 독점적 있는 prefs.xml가)

android:key="@string/pref_mypref_key" 
android:defaultValue="@string/pref_mypref_default" 

MyActivity.java을 :

String myprefVal = prefs.getString(getString(R.string.pref_mypref_key), getString(R.string.pref_mypref_default)); 
+0

감사합니다. 이것은 실제로 환경 설정 키를 저장할 위치에 관한 내 다른 질문에 대한 답변입니다.이 질문에 대한 최선의 답변과 결합 할 수 있다면 좋을 것입니다! – pixel

+2

분명히이 예제에서이 줄은'myprefVal' 할당 전에'MyActivity.java'에 나타날 것입니다 :'SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences (this);' – hotshot309

+3

이 방법이 효과적일까요? – JohnyTex