Android JetPack之Navigation(六)

上篇使用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的使用

发布了132 篇原创文章 · 获赞 29 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/Mr_Tony/article/details/103349871