当前位置: 首页 > 知识库问答 >
问题:

为什么在ViewPager2中notifyDataSetChanged炸毁PagerTransformer?

戚宏浚
2023-03-14

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

在版本1.0.0-alpha01中,他们说通知数据设置更改功能齐全(解决了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()
            }
        }

我没有改变数据源,我只是做了这个小测试,问题仍然存在,视图在每次调用通知数据设置更改后被随机调整大小。

共有2个答案

洪英豪
2023-03-14

您应该阅读 api 文档:

 /**
 * Sets a {@link PageTransformer} that will be called for each attached page whenever the
 * scroll position is changed. This allows the application to apply custom property
 * transformations to each page, overriding the default sliding behavior.
 * <p>
 * Note: setting a {@link PageTransformer} disables data-set change animations to prevent
 * conflicts between the two animation systems. Setting a {@code null} transformer will restore
 * data-set change animations.
 * ...
 */
public void setPageTransformer(@Nullable PageTransformer transformer) {}

要修复它,请尝试重置页面转换器:

pager.setPageTransformer(null)
adapter.notifyDataSetChanged()
pager.setPageTransformer(myPageTransformer)
拓拔玺
2023-03-14

你找到解决办法了吗?

对我来说,我必须调用< code > view page 2 的< code>requestTransform()函数。但是我需要在adatper之后< code>post函数调用。< code > 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()
}

希望这有帮助。

 类似资料:
  • 问题内容: 当我使用session_destroy()时,出现“会话对象销毁失败”的消息。 是什么导致此错误? 问题答案: 错误: 警告:session_destroy():会话对象销毁失败 这相当琐碎,没有会话 已启动, 对象已提交,因此您无法销毁它。 该运营商并不总是有效的,例如用错误报告功能。 编辑: 1)导致此错误的原因是什么? 此错误通常是由于PHP尝试删除会话文件而导致的,但找不到它。

  • 本文向大家介绍梯度爆炸会引发什么?相关面试题,主要包含被问及梯度爆炸会引发什么?时的应答技巧和注意事项,需要的朋友参考一下 在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的 NaN 权重值。 梯度爆炸导致学习过程不稳定。—《深度学习》,2016. 在循环神经网络中,梯度爆炸会导致网络不稳定,无法利用训练数据学习,最好的结果是网络无法

  • 问题内容: 我有一个设置为启动Java活动(称为MyJavaActivity)的android应用,这反过来又会启动NativeActivity。NativeActivity完成后,它将返回到MyJavaActivity。 我还有一个Java单例类(称为MyJavaSingleton),我希望在应用程序的整个生命周期中都将其保留在内存中。我从NativeActivity(使用JNI)中设置了一些单

  • 我已经创建了一些Spring批处理项目,并使用Spring Cloud Data Flow(SCDF)部署了这些作业。 在SCDF中启动任务(作业)后,创建JVM执行任务(作业)。 但是,当任务完成时,JVM并不结束。它仍然存在。 当我启动作业20次时,它宣布 并且有一些关于我的作业的信息,作业的第一个日志是以: 但是在我为Spring批处理项目使用了以下属性之后: 并使用JobExecution

  • 问题内容: 我想从包含单词列表的DataFrame转换为每个单词都在其自己行中的DataFrame。 如何在DataFrame中的列上爆炸? 这是我尝试的一些示例,您可以在其中取消注释每个代码行并获取以下注释中列出的错误。我在带有Spark 1.6.1的Python 2.7中使用PySpark。 请指教 问题答案: 和是SQL函数。两者都在SQL上运行。将Java正则表达式作为第二个参数。如果要在

  • C++20引入了“destroying”(带有标记类型),是的新重载。 这到底是什么,什么时候有用?