为什么notifyDataSetChanged 会炸毁ViewPager2 中的PagerTransformer?

6 android kotlin android-pagetransformer android-recyclerview android-viewpager2

我使用的是ViewPager2版本 1.0.0-beta05,带有 RecyclerView.Adapter 和ZoomOutPageTransformer,我发现当我们调用 notifyDataSetChanged 时,ViewPager 视图会爆炸。

在 1.0.0-alpha01 版本中,他们说 notifyDataSetChanged 功能齐全(解决了 VP1 错误)

吹视图

正常行为

        pagerAdapter?.clickListener = this
        with(pager) {
            clipToPadding = false
            clipChildren = false
            offscreenPageLimit = 3
        }
        pager.adapter = pagerAdapter
        pager.setPageTransformer(ZoomOutPageTransformer())


        GlobalScope.launch(Dispatchers.Main) {
            // launch a new coroutine in background and continue
            repeat(15) {
                delay(5000L) // non-blocking delay for 1 second (default time unit is ms)
                Log.e("hello", "notify")
                pagerAdapter?.notifyDataSetChanged()
            }
        }
Run Code Online (Sandbox Code Playgroud)

我没有改变数据源,我只是做了这个小测试,问题仍然存在,每次调用notifyDataSetChanged后,视图都会被随机调整为丑陋的。

Z.J*_*ung 7

你找到解决办法了吗?

对我来说,我必须调用 的ViewPager2函数requestTransform()。但我需要post在 adatper 之后调用函数。notifyDataSetChanged()

...
adapter.notifyDataSetChanged()
vb.viewpager.post {
    // I am using Fragment, and I get some crashes while I am switching tabs/fragments,
    // so here I reference the `nullable` _vb property
    _vb?.viewpager?.requestTransformation()
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。