2011-02-26 7 views
0

내 안드로이드 애플 리케이션에서 사용자가 EditView에서 텍스트를 입력하고 연락처를 선택할 수있는 다른 활동으로 데려가는 단추를 클릭하면 ... 이 그를 처음으로 데려 오는 버튼을 누릅니다. 액티비티 ...활동 전환 중보기에서 데이터 보유?

이제 문제는 선택한 컨택을 첫 번째 액티비티에 전달하고 (번들을 사용하여 수행 한) 표시해야하지만 EditView에 이미 입력 된 텍스트를 유지할 수 없습니다. . 어떻게해야합니까 (그러나 텍스트는 밖으로는 번들를 통과하고 다시 받고으로 유지되어야한다)

감사합니다 :)

답변

1

하는 뷰 구성 요소의 텍스트는 소프트 죽이기 (사용자가 전화 방향 변경) 후에도 자동으로 저장되지만, 강제 종료 후에는 부모 작업에 포커스가있는 동안 뒤로 버튼을 누르지 않습니다. 따라서 super.onSaveInstanceState를 호출하지 않고 onSaveInstanceState를 호출하는 것과 같이 비표준 작업을 수행하지 않는 한 뷰 상태의 데이터는 유지되어야합니다.

자식 액티비티를 시작하기 전에보기 구성 요소의 텍스트를 뷰가 아닌 인스턴스 속성으로 저장하고 포커스가 onActivityResult 메서드의 부모 액티비티로 되돌아 왔을 때이 값을 다시 읽는 것입니다.

JAL

편집 : Android Docs Activity 페이지 광범위하게 업데이트되었습니다. 위젯에 ID가없는 경우 뷰 상태는 저장되지 않습니다.

편집 : 내 말은 뷰 상태가 OS에 의해 유지되어야한다는 것입니다. 뷰 상태를 수동으로 저장할 필요가 없습니다. 열심히 죽이면 활동의 예상되는 행동 인 경우 활동 상태를 저장해야합니다. 다음은 활동 상태를 저장하는 코드입니다.

다음
protected void onSaveInstanceState(Bundle outState){ 
     password= editTextPassword.getText().toString(); 
     outState.putString("password", password); 
     super.onSaveInstanceState(outState); // save view state 
    } 

우리가 하드에 상태를 저장 우리가 (에서 onCreate에서 상태를 복원 여기

@Override 
protected void onStop(){ 
    super.onStop(); 

    SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putString("password",password); 
    editor.commit(); 

죽일 : 여기

String password; 

우리가 부드러운 죽에 상태를 저장 : 인스턴스 변수를 감안할 때 savedBundle savedInstanceState) :

if(savedInstanceState!= null){ // get saved state from soft kill after first pass 
    try { 
     password= savedInstanceState.getString("password"); 
     Log.d(TAG,"RestoredState!"); 
    } 
    catch(Exception e){ 
     Log.d(TAG,"FailedToRestoreState",e); 
    } 
} 
else { // get saved state from preferences on first pass 
    SharedPreferences prefs = getPreferences(MODE_PRIVATE); // singleton 
    if (prefs != null){ 
     this.password= prefs.getString("password","");  
     Log.d(TAG,"gettingPrefs"); 
    } 
} 
Log.d(TAG,"onCreate"); 
protected void onResume() { 
    super.onResume(); 
    Log.d(TAG,"onResume"); 
    isSavedInstanceState= false; 
    isSavedPrefs= false; 
} 
:는 또한 IF onSaveInstanceState 그것을 중지시 전에 호출 될 것이다라고 사실을 감안할 때, 당신이로 onResume에 플래그를 재설정하면 죽일 만 하드에의 환경 설정에 기록하는 플래그 isSavedInstanceState 및 isSavedPreferences을 사용할 수 있습니다

onCreate에 플래그를 설정해도 원하는 결과가 나오지 않습니다.

+0

뷰 구성 요소의 텍스트를 비 뷰 인스턴트 속성으로 저장하는 방법 ... 몇 가지 예 pls를 줄 수 있습니다. – kAnNaN

+0

@kAnNaN 일부 코드를 표시하기 위해 제 대답을 편집했습니다. 희망이 도움이됩니다. – JAL

관련 문제