return shellMainViewModel
}
override fun initView() {
//初始化fragment
val shellMainViewPager2Adapter = ShellMainAdapter(this
, arrayListOf(mShellMainFragment
,mShellMainPluginFragment
,mShellMainSettingFragment))
shellMainViewPager2.adapter = shellMainViewPager2Adapter
ViewPager2Delegate.install(shellMainViewPager2,shellMainTabLayout)
}
override fun initData() {
//对共享fragment里的值进行观察,同时弹出toast
sharedViewModel.testLiveData.observe(this,{
Toast.makeText(this, "$it", Toast.LENGTH_SHORT).show()
})
}
override fun startObserve() {
}
//分别添加3个子fragment
inner class ShellMainAdapter(activity: FragmentActivity, private val fragmentList: List<Fragment>)
: FragmentStateAdapter(activity){
override fun getItemCount(): Int {
return fragmentList.size
}
override fun createFragment(position: Int): Fragment {
return fragmentList[position]
}
}}
复制代码
看一下共享ViewModel代码:@HiltViewModel
class ShellMainSharedViewModel @Inject constructor() : BaseViewModel() {
val testLiveData = MutableLiveData<String>("00")
fun setValue(view: View){
val random = (1 .. 100).random().toString()
Log.i(TAG, "setValue: 随机数 $random")
testLiveData.value = random
}}
复制代码
这里非常简单,就是一个LiveData,然后接着看一下Fragment,
这里的注意点是Fragment自己的ViewModel使用viewModels来获取,对于要和整个activity生命周期共享的ViewModel使用activityViewModels来获取:@AndroidEntryPoint
class ShellMainFragment : BaseVMFragment() {
private val shellMainFragmentViewModel: ShellMainFragmentViewModel by viewModels()
//获取共享ViewModel
private val shellMainSharedViewModel: ShellMainSharedViewModel by activityViewModels()
override fun getLayoutResId(): Int = R.layout.fragment_shell_main
override fun initVM(): ShellMainFragmentViewModel {
return shellMainFragmentViewModel
}
//依次绑定2个viewModel
override fun initView() {
mBinding.setVariable(BR.sharedViewModel,shellMainSharedViewModel)
mBinding.setVariable(BR.viewModel,shellMainFragmentViewModel)
}
override fun initData() {
}
override fun startObserve() {
}}
复制代码
然后在xml中,有一个textView控件可以显示viewModel中的值,以及修改值: <?xml version="1.0" encoding="utf-8"?>
<data>
<variable
name="viewModel"
type="com.wayeal.yunapp.shell.mvvm.main.ShellMainFragmentViewModel" />
<variable
name="sharedViewModel"
type="com.wayeal.yunapp.shell.mvvm.main.ShellMainSharedViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".shell.mvvm.main.ShellMainFragment"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="首页" />
<TextView
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{sharedViewModel.testLiveData}"
android:textSize="20sp"
android:textColor="@color/black"
/>
















