2013-03-22 9 views
3

나는 뒤로 버튼을 무시하고있는 응용 프로그램을 개발 중입니다. 확인란을 만들었습니다.안드로이드 : 뒤로 버튼의 onSaveInstanceState

startActivityforResult(); 

또한 같은 활동의 상태를 유지 관리 : 잘 실행하고 상태가 유지

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putBoolean("checkbox", checkbox.isChecked()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    checkbox_state = savedInstanceState.getBoolean("checkbox"); 
} 

난에 대한 의도를 부르고있는 클릭하십시오. 편집 텍스트에 값을 입력하고 있습니다. 확인란을 클릭하면 결과에 대한 새 활동이 호출되고 첫 번째 활동이 반환되면 상태가 유지됩니다.

이제 두 번째 활동에서 장치를 다시 클릭하면 상태가 유지되지 않습니다.

다시 단추 상태를 유지하려면 어떻게해야합니까? 검색했지만 만족스러운 해결책을 찾지 못했습니다. 제발 제안 해주세요.

답변

2

새 활동을 시작하면 현재 활동이 숨겨지고 새로운 활동이 스택 맨 위에 배치됩니다. 이제 새로운 액티비티에서 뒤로 버튼을 누르면 첫 번째 액티비티가 현재 상태로 올라와야합니다 (소멸되지 않았 으면, finish()를 호출 한 곳). 즉 체크 박스가 체크 된 경우 남아 있어야합니다. 확인했다. 오리엔테이션이 변경되거나 활동이 삭제되지 않는 한 활동 상태를 저장하지 않아도됩니다.

확인란의 상태에 영향을주는 onActivityResult 또는 onResume() 메소드에서 어떤 작업도 수행하지 않습니까? 먼저 두 메서드에서 모든 코드를 주석 처리하고 확인란이 상태를 유지하는지 확인하는 것이 좋습니다. 또한 새로운 활동을 시작하기 전에 코드 자체가 확인란의 선택을 취소하지 않도록 할 수 있습니까?

+0

나는 activity2에서 텍스트를 편집하고 intent를 통해 activity1에서 해당 데이터를 잡는 중 일부 데이터를 입력하려고합니다. –

1

이제는 두 번째 활동에서부터 기기 뒷면의 버튼을 클릭하면 상태가 유지되지 않습니다.

onSaveInstanceState()은 구성 변경 (예 : 화면 회전)에 주로 사용됩니다.

그래서 내가

대부분의 경우, 할 필요가없는 "상태가"없다가 데이터 모델의 외부, "유지"뒤로 버튼의 상태를 유지하기 위해 무엇을 할 것이다. 귀하의 활동은 파일, 데이터베이스, 환경 설정, ContentProvider 등의 데이터 모델을 업데이트해야하며, 인 - 메모리 데이터 모델 관리자 인 어떤 싱글 톤이든간에.

+0

내가 데이터베이스에서 채우는 ListView가 있다고 가정 해 보겠습니다. 다른 활동에서 다시 탐색 할 때마다 데이터베이스에서 채워야한다고 생각합니까? 또는 어댑터 내용을 상태로 저장하고 재사용해야합니까? 당신의 생각을 알고 싶습니다. :) –

+0

@ 활동 : 마지막으로 활동이 끝난 이후로 데이터가 바뀔 수 있으므로 데이터베이스에서 채우기가 가장 안전합니다. 그것을 국가에 저장하는 것은 최악의 선택입니다. 중간 영역은 정보를 캐시하고 * 모든 활동에 의해 데이터 모델에 액세스하는 지점 인 일종의 데이터 모델 관리 싱글 톤을 유지하는 것입니다. – CommonsWare

+0

리소스를 낭비하기 때문에 최악입니까? 이 두 가지 활동 사이를 탐색하는 동안 데이터가 업데이트되지 않는다는 것을 안다면 상태에서 복원하는 것이 더 좋지 않습니까? 내 탐색 사이에 또는 화면을 회전 할 때 '로드 중입니다 ... 기다려주십시오'라는 메시지가 표시되지 않습니다. –