背景
展示一个注销流程,就一个Activity + 多个fragment实现,同一个viewModel 数据也可同步,但是希望回退再次进入要重新初始化页面不要保留之前的。
实现说明
Activity 采取 下面方式添加Fragment: if (frag== null) { frag = MyFragment() } } replace(R.id.logout_content, frag) // 每次都会销毁进入的时候再重建,生命周期会重新走 addToBackStack(null) // 需要有,方便返回需要
fragment 有多个,需有个BaseFragment .在里面获取viewModel 记得传Activity,别传this 因为fragment 要和activity的viewModel同一个
问题
1、每个fragment 的本地变量值修改了,再次进入的时候还是修改后的值,但是证明被销毁了,生命周期都会重新执行。原因是在Activity:
if (frag== null) {
frag = MyFragment()
}
}
这个类不会空的,还是之前的实例, 所以初始化的变量值,修改了就一直是修改的
2、监听了LiveData 每次进来会走一次监听会得到销毁前数据,所以需要在ondeStroy()把 liveData.value = null 并且在监听 - ->判空处理。
|