saved stated handle 질문드립니다.
288
작성한 질문수 8
finish를 통해서 나갔다오니까 값이 저장이 안되어있는데뭐가 문제인가요? 정상적으로 실행은됩니다.
package com.example.practice_viewmodel
import android.util.Log
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
class MyViewModel(
_counter:Int,
private val savedStateHandle: SavedStateHandle
):ViewModel() {
var counter =savedStateHandle.get<Int>(SAVE_STATE_KEY) ?:_counter
fun saveState() {
savedStateHandle.set(SAVE_STATE_KEY,counter)
}
companion object { //saved state는 key,value로 저장하기때문에 필요
private const val SAVE_STATE_KEY = "counter"
}
}
MyViewModel.kt
MyViewModelfactory.kt
package com.example.practice_viewmodel
import android.os.Bundle
import androidx.lifecycle.AbstractSavedStateViewModelFactory
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.savedstate.SavedStateRegistryOwner
import java.lang.IllegalArgumentException
//class MyViewModelFactory(private val Counter:Int) : ViewModelProvider.Factory {
// override fun<T:ViewModel> create(modelClass:Class<T>) : T {
// if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
// return MyViewModel(Counter) as T
// }
// throw IllegalArgumentException("ViewModel not ofund")
// }
//}
class MyViewModelFactory(
private val counter:Int,
owner:SavedStateRegistryOwner,
defaultArgs: Bundle?=null,
):AbstractSavedStateViewModelFactory(owner, defaultArgs) {
override fun <T : ViewModel?> create(
key: String,
modelClass: Class<T>,
handle: SavedStateHandle
): T {
if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
return MyViewModel(counter,handle) as T
}
throw IllegalArgumentException("Viewmodel class not found")
}
}
mainAcitivty.kt
package com.example.practice_viewmodel
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.activity.viewModels
import androidx.lifecycle.ViewModelProvider
import com.example.practice_viewmodel.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private val binding : ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
// val factory = MyViewModelFactory(100)
// //val myViewModel = ViewModelProvider(this, factory).get(MyViewModel::class.java)
// val myViewModel by viewModels<MyViewModel>() {factory}
//
// binding.textview.text = myViewModel.counter.toString()
//
// binding.plusBtn.setOnClickListener {
//
// myViewModel.counter+=1
// binding.textview.text = myViewModel.counter.toString()
//
// }
// binding.minusBtn.setOnClickListener {
//
// myViewModel.counter -=1
// binding.textview.text = myViewModel.counter.toString()
// }
val factory = MyViewModelFactory(100,this)
val myViewModel by viewModels<MyViewModel>() {factory}
binding.textview.text = myViewModel.counter.toString()
binding.plusBtn.setOnClickListener {
myViewModel.counter+=1
binding.textview.text = myViewModel.counter.toString()
myViewModel.saveState()
}
binding.minusBtn.setOnClickListener {
myViewModel.counter -=1
binding.textview.text = myViewModel.counter.toString()
myViewModel.saveState()
}
binding.finish.setOnClickListener {
finish()
}
}
}
답변 1
1
savedstate는 앱이 백그라운드로 들어갔을 때 시스템이 앱을 강제로 중단했을 경우 데이터를 보존하기 위해 사용하는 임시 저장소입니다. finish로 인한 종료시에는 동작하지 않는 사양으로 되어 있습니다.
Coroutine, Flow 질문
0
401
1
Transformations import 안됨
0
588
1
moshi관련 질문입니다.
0
566
2
searchBooks() 에서 북 검색 입력을 너무 빨리 할 경우 마지막 글자로 검색이 안돼요.
0
375
1
안드로이드에서 아키텍처 패턴
0
423
1
RecyclerView.Adapter vs ListAdpater
0
473
1
Flows 와 Coroutine
1
573
1
[BookSearchAdapter] onBindViewHolder의 currentList[position] 질문
0
370
1
코루틴 메모리 관련해서 질문드립니다!
0
456
1
Java Bill Pugh Solution 에서 INSTANCE
0
469
1
nested json에서 특정 부분만 파싱하는법
0
495
1
Fragment에서의 viewBinding
0
525
3
toolbar 질문드립니다.
0
417
2
EditText 에서 delay 주셔서 처리하셨는데 flow 의 debounce() 하고 같은건가요?
2
568
1
코루틴 관련 질문
0
549
1
오류
1
494
2
강사님! 직렬화 라이브러리를 Moshi, kotlin serialization 두개를 사용하시던데 이유가 있으신가요?
1
749
1
EditText 는 kill 해도 값이 잘 저장되어있던데 혹시 제가 잘못테스트했을까요?
1
354
1
서버도 페이징 기능이 되는데 Paging 라이브러리가 필요할까요?
1
530
1
GSON 이 아닌 Moshi 를 사용하시는 이유가 있을까요?
1
1271
1
EditText 는 액티비티가 재생성되어도 값이 남아있던데 이유가 궁금해요
1
498
1
ViewModel 생성시 왜 초기값을 받지 않도록 했을까요?
1
438
1
Room DB에 id 항목 추가
0
255
1
안녕하세요. 용어에 대해 질문이 있어 글 남깁니다.
0
410
2





