2013-04-06 3 views
0

안녕하세요 토글 버튼을 보여주는 활동이 있습니다. 문제는 기기에서 뒤로 버튼을 누른 다음 다시 내 활동으로 돌아 오면 버튼 상태가 재설정된다는 것입니다.Android 토글 버튼 상태

전체 수명주기 동안 버튼의 상태를 "기억"하게하려면 어떻게합니까?

+0

사용 SharedPrefrences은 ... – Rahil2952

+0

가능한 중복 : http://stackoverflow.com/q/151777/1048087 – Prizoff

+0

당신이에서 onCreate()'와'onSaveInstanceState()'에서 얻을 번들을 사용하여 '저장 /로드 할 버튼 상태. 라이프 사이클 임시 저장에는 기본 설정을 사용하지 않아야합니다. –

답변

1

상태를 영구 메모리에 저장해야합니다. Shared Preferences이 최선의 선택입니다. 같은

뭔가 (토글 버튼으로 활동 내부) :

public void saveButtonState(boolean pressed) { 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putBoolean("TOGGLE_BUTTON_STATE", pressed); 
    editor.commit(); 
} 

는 다음에서 onCreate에서 당신이 된 SharedPreferences에서 "TOGGLE_BUTTON_STATE"를 읽어 버튼 상태를 설정할 수 있습니다.

이 활동은
if (buttonView == lib) { 
      if (isChecked) { 
       prefsEditor.putBoolean(Constants.SENDEVENT_PREFERENCE_SAVE_LIBRARY, 
         true); 
       prefsEditor.commit(); 
      } else { 
       prefsEditor.putBoolean(Constants.SENDEVENT_PREFERENCE_SAVE_LIBRARY, 
         false); 
       prefsEditor.commit(); 
      } 
} 
+0

나는이 코드를 가지고있다 : – user1071138

+0

덕분에, 나는 이것을 사용했고 onResume() 메소드로 상태를 다시 시작했다.) – user1071138

+0

니스는 내 대답을 받아 들여서 질문에 답을 얻는다. – jelgh

2

는이 작업을 수행 완전히 파괴 된 다음 안드로이드 아키텍처로 인해 다시 복원되었습니다. 단추의 상태를 저장하려면 onSaveInstaceState()의 번들에 상태를 저장하고 onRestoreInstanceState()에 복원해야합니다. 이러한 메서드는 이러한 종류의 작업을 위해 특별히 설계되었습니다.

@Override 
protected void onSaveInstanceState (Bundle outState) { 
    // Your code here 
} 

@Override 
protected void onRestoreInstanceState (Bundle savedInstanceState) { 
    // Your code here 
} 

상세 docs에서 볼 :

그래서 대답은 당신이 두 가지 방법에 버튼 상태를 복원/절약을 구현해야합니다입니다

참고 "Killable"열을 위의 표에서 - killable로 표시된 메소드의 경우 해당 메소드가 다른 코드 행을 실행하지 않고 언제든지 시스템에서 살해 될 수있는 프로세스를 리턴 한 후이를 리턴합니다. 이 때문에 onPause() 메서드를 사용하여 저장소에 영구 편집 (예 : 사용자 편집)을 작성해야합니다. 또한 onSaveInstanceState (Bundle) 메서드는 이러한 백그라운드 상태로 활동을 배치하기 전에 호출되므로, 활동의 동적 인스턴스 상태를 지정된 번들로 저장하여 나중에 onCreate (번들)로 수신 할 수 있습니다 다시 만들어야합니다. 프로세스의 라이프 사이클이 호스팅되는 활동에 어떻게 연결되는지에 대한 자세한 내용은 프로세스 수명주기 섹션을 참조하십시오. 후자는 라이프 사이클 콜백의 일부가 아니므로 onSaveInstanceState (Bundle) 대신 onPause()에 영구 데이터를 저장하는 것이 중요하므로 해당 설명서에 설명 된대로 모든 상황에서 호출하지 않기 때문에 유의하십시오.

1

상태가 reseted하는 이유가된다 :

SharedPreferences preferences = this.getSharedPreferences(Constants.SENDEVENT_PREFERENCE,Context.MODE_PRIVATE); 
if(preferences.getBoolean(Constants.SENDEVENT_PREFERENCE_SAVE_LIBRARY, false)) 
      lib.setChecked(true); 

그리고 onCheckedChanged 방법이 수행 onCreate() 또는 귀하의 요구 사항에 따라 onResume()에 때