ViewPager2 从 API 获取数据无法正常工作

问题描述 投票:0回答:1
lifecycleScope.launch {
            viewModel.nowPlayingMovieList.collect{
                sliderAdapter.submitData(it)
            }
        }

        sliderAdapter.setOnItemClickListener {
            val direction = MoviesFragmentDirections.actionMoviesFragmentToMovieDetailsFragment(it.id,it.poster_path)
            findNavController().navigate(direction)
        }

        viewpagerSlider.apply {
            setViewPager()
            adapter = sliderAdapter
        }

    }
}
private fun setViewPager() {
    binding.viewpagerSlider.clipToPadding = false
    binding.viewpagerSlider.clipChildren = false
    binding.viewpagerSlider.offscreenPageLimit = 3
    binding.viewpagerSlider.getChildAt(0).overScrollMode = RecyclerView.OVER_SCROLL_NEVER

    binding.viewpagerSlider.adapter = sliderAdapter

    val middlePosition = Int.MAX_VALUE / 2
    binding.viewpagerSlider.setCurrentItem(middlePosition, false)

    binding.viewpagerSlider.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            val itemCount = sliderAdapter.itemCount
            if (position == 0) {
                binding.viewpagerSlider.setCurrentItem(itemCount / 2, false)
            } else if (position == itemCount - 1) {
                binding.viewpagerSlider.setCurrentItem(itemCount / 2, false)
            }
        }
    })

    val compositePageTransformer = CompositePageTransformer()
    compositePageTransformer.addTransformer(MarginPageTransformer(25))
    compositePageTransformer.addTransformer { page, position ->
        val r: Float = 1 - abs(position)
        page.scaleY = 0.90f + r * 0.10f
    }
    binding.viewpagerSlider.setPageTransformer(compositePageTransformer)

}

这是我的源代码;我正在尝试从我的 API 中获取一些图像。现在几乎无法正常工作。问题是当我打开片段时我看不到任何东西。我看到的是我的背景,但是当我移动到另一个片段并回到这里后,我可以看到我的视图分页器工作正常。问题是什么。怎么解决?

android kotlin android-recyclerview android-viewpager
1个回答
0
投票

在您的

Fragment
onViewCreated
中尝试此代码:

lifecycleScope.launch {
    viewModel.nowPlayingMovieList.collect {
        sliderAdapter.submitData(it)
    }
}

sliderAdapter.setOnItemClickListener {
    val direction = MoviesFragmentDirections.actionMoviesFragmentToMovieDetailsFragment(it.id,it.poster_path)
    findNavController().navigate(direction)
}

viewpagerSlider.apply {
    setViewPager()
    adapter = sliderAdapter
}

正如我在评论中所说,只有Flow的collect方法需要包装在协程中

© www.soinside.com 2019 - 2024. All rights reserved.