Closed ppg408331701 closed 4 years ago
还有一个小问题。我在demo的fragment中想调用getActivityViewModel时,出现ide提示要实现一个getValue方法,但是kotlin我是初学者,请问这种情况是怎么回事
/**
* 在Fragment中得到父类Activity的共享ViewModel
* 提示,在fragment中调用该方法时,请在该Fragment onCreate以后调用或者请用by lazy方式懒加载初始化调用,不然会提示requireActivity没有导致错误
*/
inline fun <reified VM : BaseViewModel> Fragment.getActivityViewModel(): VM {
return ViewModelProvider(requireActivity(),
ViewModelProvider.AndroidViewModelFactory(this.requireActivity().application)
).get(VM::class.java)
}
不会受到影响的,因为他们两个都是绑定各自的fragment,相当于独立存在, 当然如果你得数据库对象是单例那肯定会有影响 还有就是两个fragment持有的viewmodel两个都是绑定了父Activity的话,就可以达到共享作用域
下面的你多了一个括号 删除泛型前面的那个就好了
嗷嗷,谢谢了。
那个括号是android studio的代码补全的时候自己加的,没注意。 感觉kotlin的代码补全没java的智能
me.hgj.jetpackmvvm.demo D: loginFragment--------->onCreate me.hgj.jetpackmvvm.demo D: loginFragment--------->onStart me.hgj.jetpackmvvm.demo D: loginFragment--------->onResume me.hgj.jetpackmvvm.demo D: loginFragment--------->LoginRegisterViewModel@5df2ec me.hgj.jetpackmvvm.demo D: loginFragment--------->RequestLoginRegisterViewModel@68c86b5 me.hgj.jetpackmvvm.demo D: RegisterFrgment--------->onCreate me.hgj.jetpackmvvm.demo D: RegisterFrgment--------->onStart me.hgj.jetpackmvvm.demo D: RegisterFrgment--------->onResume me.hgj.jetpackmvvm.demo D: RegisterFrgment--------->LoginRegisterViewModel@b754ad6 me.hgj.jetpackmvvm.demo D: RegisterFrgment--------->RequestLoginRegisterViewModel@5424157
我注意到LoginFragment和 RegisterFrgment 共用了2个ViewModel,但是因为是使用getViewModel(获取当前fragment上下文的方法)获取的,所以这两个ViewModel并不是同一个对象。 假设我在LoginFragment和RegisterFrgment 的RequestLoginRegisterViewModel都内持有了数据库的操作对象,那么我在RegisterFrgment 被销毁的时候回调rViewModel的onCleared()中把它close了。那么会影响到LoginFragment的RequestLoginRegisterViewModel内的数据库的操作对象吗?