【问题标题】:communication between viewpager adapter and viewModelviewpager 适配器和 viewModel 之间的通信
【发布时间】:2021-04-03 15:31:20
【问题描述】:

我在viewpager 中使用了recyclerview。现在我想在滚动回收站视图时更改fragment 的视图。 我正在使用mvvmliveData,我想使用viewModel 并将滚动数据发送到我的viewModelviewobserve 来自viewPager 适配器的viewModel 数据。 如何从viewPager 适配器发送数据并在其fragment 中使用它们?

val linearLayoutManager =
        LinearLayoutManager(container.context, LinearLayoutManager.VERTICAL, false)
    recCafeList = binding.recCafeList

    recCafeList.layoutManager = linearLayoutManager
    recCafeList.adapter = mAdapter



    recCafeList.setOnScrollListener(object : RecyclerView.OnScrollListener() {

        override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
            super.onScrolled(recyclerView, dx, dy)

            val po = linearLayoutManager.findFirstVisibleItemPosition()
            val po2 = linearLayoutManager.findFirstCompletelyVisibleItemPosition()
            
            // I want to send @po and @po2 to viewModel and use them in fragment
            
            Log.i("scrollListener", "$po //// $po2")
        }

    })

    container.addView(binding.root)

    return binding.root

【问题讨论】:

    标签: android android-viewpager android-livedata android-viewmodel android-mvvm


    【解决方案1】:

    您可以使用自定义侦听器。在片段内创建它并将其传输到寻呼机适配器。并且在任何时候你都可以调用 listeners 方法。就像那样 - Android communication between fragment and baseadapter

    这是一个简单而好的练习解决方案。

    【讨论】:

    • 问题是关于 ViewPager,而不是 ListView。
    • 完全没有区别,兄弟。对于 ListView、RecyclerView、ViewPager 和任何其他使用适配器的视图,解决方案都是完全相同的。
    • 不,FragmentPagerAdapter 的行为不同,因此解决方案有点不同。
    • 争论,有什么区别?您在片段中创建侦听器,在适配器中提供它,在您调用侦听器方法的任何地方的适配器中。
    • “在适配器中提供”?这在进程死亡后将不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多