Save State for CustomView
커스텀뷰 상태 저장(Save State for CustomView)
Save State for CustomView
커스텀뷰 상태 저장
커스텀뷰가 그려지고 메모리 부족 등으로 인해 다시 그려지는 순간 데이터를 저장한후 다시 가져와야 화면에 그대로 보여줄수 있다.
개발자 모드에서 활동 유지 안함을 활성화 한 후 테스트해야 한다.
아래는 커스텀뷰 상태 저장을 하지 않은 상태이다.
이제부터 데이터 저장을 해보자~!
이때 필요한 메소드는 onSaveInstanceState , onRestoreInstanceState 두개이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
override fun onSaveInstanceState(): Parcelable? {
return Bundle().apply {
putParcelable(KEY_ON_SAVE_INSTANCES_TATE, super.onSaveInstanceState())
putStringArrayList(KEY_SAVE_DATA, ArrayList(textViewArrayList.map {
it.text.toString()
}))
}
}
override fun onRestoreInstanceState(state: Parcelable?) {
if (state is Bundle) {
super.onRestoreInstanceState(state.get(KEY_ON_SAVE_INSTANCES_TATE) as Parcelable)
state.getStringArrayList(KEY_SAVE_DATA)?.let {
if (it.isNotEmpty()) {
removeAllViews()
it.filter { originContent ->
originContent != "," && originContent != endText
}.forEach { filteredContent ->
addText(filteredContent, false)
}
}
}
} else {
super.onRestoreInstanceState(state)
}
}
활동 유지 안함을 하게 되면 Activity 가 종료된 후 다시 생성되게 되는데 이때 뷰의 onSaveInstanceState 가 호출 된다.
위와같이 StringArrayList 를 onSaveInstanceState 에서 저장하고 다시 생성 될 때 onRestoreInstanceState 가 호출되고 onSaveInstanceState 에서 return 해준 Bundle 이 state 로 넘어온다.
이때 주의 해야하는 점은 super.onRestoreInstanceState()를 호출 해줄 때 super.onSaveInstanceState() 를 저장한 값 그대로 넣어줘야 한다.
아래는 커스텀뷰 상태 저장을 한 상태이다.
데이터 상태를 저장 한 후 다시 불러 왔기때문에 금액 입력이 보이지 않고 원래 적었던 금액이 보이게 된다.
완성도 높은 CustomView 를 만들게 되면 이부분은 필수적인 부분이라고 볼 수 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

