액티비티 생애의 특정 시점에서 사용자 인터페이스의 상태 데이터를 저장하고 복원하는 방법을 알아보자!
[Bundle 객체 참조]
:액티비티의 오버라이딩한 onSaveInstanceState()메서드가 런타임 시스템에 의해 호출 됨으로써 액티비티는 동적상태 정보를 저장할 수 있는 기회를 갖는다 . 그때 메서드의 인자로 전달 되는 것
* 동적 상태 저장
1. 런타임 시스템에 의해 보존 되며 향후에 그 액티비티의 새로운 인스턴스가 생성 되어 onCreate()와 onRestoreInstace() 메서드가 호출 될때 그 메서드들의 인자로 전달된다.
2. 따라서 그 메서드들 내부에서 Bundle 객체의 데이터를 읽어서 액티비티의 상태를 복원하는데 사용 가능 한 것!
직접 실행하기
<사용자 인터페이스 상태의 자동 저장과 복원>
1.그냥 애플리케이션 실행 하면
2.핸드폰을 90도 회전 시켰더니
안드로이드 SDK에 포함된 뷰위젯 들은 액티비티가 다시 시작할때 자신의 상태 데이터를 자동으로 저장하고 복원하는 코드를 이미 구현하고 있다.
그리고 그렇게 동작하게하려면 우리 액티비티에서 오버라디잉 하는 onSaveInstanceState(),onRestoreInstanceState() 메서드에서 슈퍼 클래스의 오버라이딩 되는 메서드를 호출하게 하고 안드로이드 XML 레이아웃파일에서 android:saveEnabled 속성을 true로 지정하면 된다.
동적상태의 데이터가 사용자 인터페이스 뷰 객체들의 데이터만 의미하는 것이 아니기 때문에 파일이나 데이터베이스 등에는 저장하지 않지만 액티비티 내부에서 보존해야하는 변수들이 필요할수 있다.
이런 변수 데이터를 포함하는 모든 동적상태 데이터를 저장 및 복원하는 방법은?
레이아웃에 있는 editText뷰 객체의 데이터를 수동으로 저장하고 복원하는 것을 보여주기 위해서
우선, xml 레이아웃 파일의 android:saveEnabled 속성을 false로 지정한다.
->사용자 인터페이스 뷰의 상태를 자동으로 저장하는 것을 막는다.
결과
90도 회전 해보면 저장이 안됨
이제 사용자가 edit text에 입력한 텍스트를 bundle 객체에 저장했다가 향후에 복원하게하는 한다
->bundle 클래스의 getCharSequence()와 putCharSequence()메서드를 사용해서 Bundle 객체로부터 상태데이터를 읽거나 저장할수 있다.
...
출처:핵심만 골라 배우는 안드로이드 스튜디오
'안드로이드' 카테고리의 다른 글
[안드로이드]리스트뷰에 추가하기 (0) | 2017.12.22 |
---|---|
[안드로이드] RecyclerView의 item 클릭하기 (0) | 2017.12.21 |
[안드로이드]리사이클뷰 (0) | 2017.12.21 |
[안드로이드] 인텐트와 생명주기 (0) | 2017.12.14 |
[안드로이드] 아키텍처 (0) | 2017.12.14 |