2012-01-03 3 views
2

이 질문은이 포럼에서 여러 번 묻습니다. 그러나 나는 아직도 나를 위해 깨끗이 할 필요가 있다고 생각한다. 나는 거짓 XML의 기본 값을 설정하지만 위의 코드에서xml의 기본값으로 환경 설정이 초기화되지 않음

public class PrefTest extends Activity { 
    public Button bt_start= null; 
    SharedPreferences mSharedPreferences; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

    setContentView(R.layout.main); 


    bt_start = (Button) findViewById(R.id.button1); 
    bt_start.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     Log.d("TEST",""); 
     PreferenceManager.setDefaultValues(getApplicationContext(), 
         R.xml.settings_org, true); 
     mSharedPreferences = PreferenceManager 
     .getDefaultSharedPreferences(getApplicationContext()); 
     Boolean test = false; 
     test = mSharedPreferences.getBoolean("auto_launch_key", true); 
     Log.d("TEST","test = "+test); 
    } 
     }); 
    super.onCreate(savedInstanceState); 
    } 

    @Override 
    protected void onStart() { 
    super.onStart(); 
    } 
} 

Log.d("TEST","test = "+test); 

항상 setDefaultValues을 기대

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
<PreferenceCategory android:title="settings" > 
    <CheckBoxPreference android:key="auto_launcvh_key" 
     android:summaryOn="..." 
     android:summaryOff="---" 
     android:title="auto_launch_string" android:defaultValue="false" /> 
</PreferenceCategory> 
</PreferenceScreen> 

암 (아래로), 사실를 인쇄 XML에서 기본값을 가져 와서 환경 설정을 초기화하십시오.

내 이해가 잘못 되었나요?

+0

게시물을 편집하고 ** 전체 ** 환경 설정 (계층 구조) XML 파일을 추가 하시겠습니까? –

+0

@Marvin, 내 질문에 완전한 xml 파일을 편집했습니다. – Kozlov

답변

2

UPDATE 난 당신이 아마 제대로 SharedPreference 객체를 검색하지 않습니다 볼 수 있습니다 더 정밀한 점검에

. 시도하지는 않았지만이 테스트 작업을 수행하기 위해 XML 파일에 정의 된 값을 저장하는 객체를 얻기 위해 XML 파일의 이름을 getSharedPreferences (String name, int mode)으로 호출해야한다고 가정합니다.

getDefaultSharedPreferences (Context context) 상태 :

주어진 컨텍스트에서 기본 프레임 워크에서 사용하는 기본 파일을 가리키는 된 SharedPreferences 인스턴스를 가져옵니다. 매개 변수

컨텍스트 값이 필요한 환경 설정 컨텍스트. 반환

환경 설정 값에 을 검색하고 수신하는 데 사용할 수있는 SharedPreferences 인스턴스입니다.

파일이 기본 파일로 보이지 않으므로 호출하려는 환경 설정이 존재하지 않습니다.

일반적으로 환경 설정을 처리하는 방법은 기본 설정 인터페이스를 만드는 하위 클래스 PreferenceActivity이지만 간단한 테스트를 작성하는 것이 좋습니다.

또한 질문을 작성할 때 CheckBoxPreference android:key="auto_launcvh_key"이 오타라고 가정합니다. 내가 처음이 답을 쓸 때 내가 키를 확인 생각하고 그것은 ORIGINAL CheckBoxPreference android:key="auto_launch_key"

했다

지금 다음, 설정이 때문에이 시스템에 존재하지 않는 false를 반환하는 경우 첫째로 나는 test = mSharedPreferences.getBoolean("auto_launch_key", false);-test = mSharedPreferences.getBoolean("auto_launch_key", true);을 바꿀 것 환경에 문제가 있습니다. 프로젝트를 청소하고 다시 설치하십시오.

둘째 워드 프로세서에서이

readAgain을 말한다 -하는 기본값을 다시 읽어 여부. 참고 :이 설정은 기본 설정으로 다시 설정되지 않습니다. 기능의 경우 getDefaultSharedPreferences (Context)를 사용하고 을 지운 다음이 매개 변수를 true로 설정하여이 메소드를 호출하십시오.

따라서 환경 설정이 이미 true로 설정되어있는 경우이 설정은 덮어 쓰지 않으므로 다시 설치하면이 설정도 함께 정렬되어야합니다. 또는 에 clear()을 호출 한 다음 PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.settings_org, true);

을 호출 할 수 있습니다. 그래도 작동하지 않으면 완전한 XML을 게시 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. if test = mSharedPreferences.getBoolean ("auto_launch_key", false); 거짓을 반환합니다. 하지만 내 의심은 이제 언제 환경 설정이 만들어 질 것인가입니다. 생성 된 것이 아니라 다음에 생성 될 때까지 계속해서 생성됩니까? 그러면 android : defaultValue = "false"(XML)의 요점은 무엇입니까? – Kozlov

+0

기본 설정을 응용 프로그램 컨텍스트에 연결하면 응용 프로그램 컨텍스트가 이미 존재하므로 호출하는 활동 방법에 관계없이 즉시 작성해야합니다 (단, 서비스 및 활동에서 이러한 기본 설정을 사용하는 경우에는 일반적으로 – zode64

+0

어떻게 생성되지 않는지 알 수 있습니까? – zode64

1

답변은 실제로 매우 간단합니다.

test = mSharedPreferences.getBoolean("auto_launch_key", false); 

을 따라서 XML의 기본 설정이 사실과 다른 용도를 읽고 해당하는 경우 : false로 기본 값을 설정해야 그렇게 할 때 부울 값을 읽는 환경 설정 파일에 부울 값은 해당하는 경우에만 존재 디폴트는 getBoolean 디버깅하는 동안 false 값을 가진 부울 환경 설정이 없다는 것을 알았습니다.

관련 문제