[문제 발생]
android 개발 중 화면 전환을 하게 되면 데이터가 사라지는 문제가 발생했다.
데이터가 초기화 되면서 기존의 데이터가 사라지는 현상인데 이를 해결하기 위한 방법이 필요했다.
[해결 방안]
가장 좋은 방법은 View Model을 사용하는 것이다.
이전에 개발을 할 때 다른 fragment에 다녀 올 때 fragment의 생명주기가 Destroy 상태가 된다면
기존의 데이터들을 잃는 상황이 발생 했었다. 하지만 이 뷰 모델 기능을 사용하면
화면 전환시 데이터가 사라지는 문제, 다른 fragment에 다녀온 후 데이터가 사라지는 문제를 해결할 수 있다.
<step 1> 라이브러리 등록과 view model class 제작하기
view model 관련 개발 가이드 출처 : ViewModel 개요 | Android 개발자 | Android Developers
ToDoMainViewModel 이라는 class를 선언 해주었다.
액티비티에서 해당 모델을 선언하면 fragment에서의 데이터들을 유지할 수 있다.
아래의 뷰 모델은 액티비티가 종료될 때 제거 된다.
class ToDoMainViewModel : ViewModel(){
//데이터를 관리하는 곳
}
아래와 같이 todoData를 view model 내부에서 선언해 주었다.
이 엑티비티와 관련된 fragment 들은 viewmodel 내부의 todoData를 이용할 수 있을 뿐 아니라
addData , delData, changeDate 등 제작한 함수도 사용할 수 있다.
private var todoData = ArrayList<Todo>()
fun addData(text:String){
todoData.add(Todo(text, false))
}
fun delData(todo: Todo){
todoData.remove(todo)
}
fun changeData(todo:Todo){
todo.isDone = !todo.isDone
}
<step 2> mainActivity에서 viewmodel 사용하기
우선 mainActivity에서 앞에서 만들어둔 view model을 선언후 초기화 해준다.
private val viewModel : ToDoMainViewModel by viewModels() // 뷰 모델 선언, 초기화
이제 초기화한 view model을 바로 사용할 수 있다.
사용하는 방법은 매우 간단하다 직접 viewmodel의 데이터를 아까 제작한 addData,delDate 등으로
조작하면 된다.
editText의 데이터를 viewModel에 추가하는 코드이다.
viewModel.addData(binding.editText.text.toString())
[리뷰]
fragment 간에 이동 시 기존 데이터가 유지되었으면 좋겠다는 생각에 방법을 찾아보았다.
이렇게 매우 편리한 기능을 알게 되었으니 앞으로의 코드가 더 간결해 질 수 있을 것 같다.