viewpager 适配器和 viewModel 之间的通信

communication between viewpager adapter and viewModel

我在viewpager里面用了recyclerview。现在我想在滚动回收站视图时更改 fragment 的视图。 我正在使用 mvvmliveData 并且我想使用 viewModel 并将滚动数据发送到我的 viewModelviewobserve viewModel 来自 viewPager 适配器的数据。 如何从 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

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

这是简单且很好的练习解决方案。