上篇使用ViewModel解决了Navigation中切换Fragment导致数据丢失的问题,但是会引起变量重复定义的问题,这里使用Jetpack中的LivaData进行解决这个问题
引入依赖
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.1.0"
lifecycle-extensions包含了LiveData和ViewModel依赖,所以不用重新引入
implementation "androidx.lifecycle:lifecycle-extensions:2.1.0
上篇使用的ViewModel有很多种依赖方式,本篇使用以下依赖:
implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"
修改TestViewModel代码
class TestViewModel: ViewModel(){
var mutableCount = MutableLiveData(0)//默认值为0
fun addAction(){
mutableCount.value = mutableCount.value?.plus(1)
}
}
修改MainPage2Fragment代码
class MainPage2Fragment : Fragment() {
private val args: MainPage2FragmentArgs by navArgs()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View {
return inflater.inflate(R.layout.fragment_item2, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
content.text = "获取的参数:${args.page2}"
val args = MainPage3FragmentArgs("哈哈")
val model = activity?.let { ViewModelProviders.of(it).get(TestViewModel::class.java) }
model?.mutableCount?.observe(this, Observer<Int> {
click_count.text = "点击次数:$it"
})
go.setOnClickListener {
findNavController().navigate(R.id.page2action,args.toBundle())
}
click_count.setOnClickListener {
model?.addAction()
}
}
}
目前为止问题基本上得以解决,后续开始继续Navigation的使用