ViewModel
class MyViewModel : ViewModel() {
var number = 0
}
MainActivity
class MainActivity : AppCompatActivity() {
private val myViewModel by viewModels<MyViewModel>()
var mBinding: ActivityMainBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
mBinding!!.tv.text = myViewModel.number.toString()
mBinding!!.btn.setOnClickListener {
myViewModel.number++
mBinding!!.tv.text = myViewModel.number.toString()
}
}
}

image.png

image.png
頁面重建時(shí)數(shù)據(jù)不會丟失
ViewModelSavedState
const val NUMBER_KEY = "number_key"
class MyViewModel(private val state:SavedStateHandle) : ViewModel() {
var number:Int
get() {
return state.get<Int>(NUMBER_KEY)?:0
}
set(value) {
state[NUMBER_KEY] = value
}
}
MainActivity
class MainActivity : AppCompatActivity() {
private val myViewModel by lazy {
ViewModelProvider(this, SavedStateViewModelFactory(application, this)).get(MyViewModel::class.java)
}
var mBinding: ActivityMainBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
mBinding!!.tv.text = myViewModel.number.toString()
mBinding!!.btn.setOnClickListener {
myViewModel.number++
mBinding!!.tv.text = myViewModel.number.toString()
}
}
}
再次運(yùn)行程序,數(shù)據(jù)就不會丟失了。
需要注意的是,這里的數(shù)據(jù)也不是永久保存的,當(dāng)手機(jī)重啟或者用戶手動殺掉進(jìn)程后,數(shù)據(jù)仍然會丟失。