我与ViewModel
和片段进行合作,并希望保留我的ViewModel
片段,以便更改轮播。将Fragment
传递给ViewModelProviders.of()
时,它不会被保留,但是当我传递片段所属的Activity
时,它会被保留。所以通过活动应该如何使用它?
在ViewModelProviders.of(this)
中呼叫Fragment
不会保留我的ViewModel
。这是预期的行为吗?
class MainFragment : Fragment() {
private lateinit var viewModel: MainViewModel
fun OnXXXXXXXXX {
// This _will NOT_ retain ViewModel
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
// This _will_ retain ViewModel
viewModel = ViewModelProviders.of(activity).get(MainViewModel::class.java)
}
}
答案 0 :(得分:1)
是的,它的预期行为,请查看this content
片段可以使用其活动范围共享ViewModel来处理此通信
如果要共享相同的ViewModel,请使用相同的上下文。例如,同一活动有多个片段:
const same = (...xs) => new Set (xs).size === 1
const x = 'aaa'
const y = 'aaa'
const z = 'aaa'
const areSame = same (x, y, z)
console.log(areSame)
const x_ = 'aaa'
const y_ = 'bbb'
const z_ = 'aaa'
const areSame_ = same (x_, y_, z_)
console.log (areSame_)