问题标签 [android-viewpager2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1951 浏览

java - 页面包含带有 LayoutTransition(或 animateLayoutChanges="true")的 ViewGroup,这会干扰滚动动画

我在 ViewPager2 中使用片段,我注意到生产中的两个相关 IllegalStateExceptions(我自己无法重现)发生在运行 Android 8 或 9 的小米、玉龙、华硕、vivo 等设备中:

在环顾四周时,我通过了以下线程:https://issuetracker.google.com/issues/129530305,据我理解,它似乎总结为animateLayoutChanges在 viewPager2 的任何父布局上设置为 false ,这就是我所做的。不幸的是,这并没有解决我的问题。然后我发现了另一个线程:java.lang.IllegalStateException: Page can only be offset by a positive amount,这似乎没有多大帮助。知道还有什么可能导致问题吗?

0 投票
1 回答
617 浏览

android - 如何在新的 ViewPager2 中禁用 Fragment 的销毁?

FragmentPagerAdapterI can overridedestroyItem方法中,只需删除行super.destroyItem(container, position, object);

然后片段将不再被删除。但是在新的FragmentStateAdapter我还没有找到同样的方法。

0 投票
0 回答
354 浏览

java - ViewPager2:如何实现独立片段

我知道这是一个广泛的问题,但问题如下。我有一个列出 TODO 任务的片段。现在我想添加一个滑动视图——第二页——列出已经完成的任务。所以基本上我想要实现的目标是这样的:

试想一下,有两个静态页面“TODO”和“DONE”

这意味着我需要在两个屏幕之间共享数据。另请注意,这两个页面需要具有完全不同的布局。

我已经完成了研究,全新的 ViewPager2 似乎是要走的路。 但是,官方文档并没有真正谈论我的用例。他们似乎有使用相同布局的页面,并且彼此之间不共享数据: https ://developer.android.com/guide/navigation/navigation-swipe-view-2

由于 ViewPager2 是全新的,我决定立即发布 Stackoverflow 问题,因为我很肯定我的用例是最受欢迎的,因此会有更多人提出相同的问题。

Summa summarum:如何使用新的 ViewPager2 库实现两个具有独立布局的 Fragment 共享数据和滑动视图本身。

0 投票
2 回答
2499 浏览

java - ViewPager2/Tabs 问题与 ViewModel 状态

我遵循 MVVM 模式——这意味着我为每个片段都有一个 ViewModel。

我使用 ViewPager2添加了两个选项卡。

我的适配器如下所示:

选项卡正在工作。但是,我注意到我的 MergedItemsFragment 的 ViewModel 表现得很奇怪。在添加选项卡之前,我导航到 Fragment,如下所示:

当我离开那个片段NavHostFragment.findNavController(this).popBackStack()并稍后返回那个片段时,我会得到一个新的空视图模型。这是故意的。

使用我正在导航的新方法return new MergedItemsFragment()。当我离开该片段并稍后返回时,我得到一个包含旧数据的 ViewModel 。这是一个问题,因为旧数据不再相关,因为用户在另一个片段中选择了不同的数据。


更新#1

我意识到他实际上将所有片段都保存在内存中,因为相同的打印语句被多次调用。它被调用的次数随着我离开并返回该屏幕的次数而增加。因此,如果我离开并返回 10 次并旋转我的设备,他实际上将执行一行 10 次。任何猜测如何以与 ViewModel 一起使用的方式使用导航组件实现选项卡/视图页面?


更新#2

我这样设置我的 ViewModel:

我得到相同的结果:

我将 ViewModel 绑定在 Fragment 本身中。因此,this是片段。

0 投票
1 回答
1640 浏览

android - 如何使用 Viewpager2 和 Mediator 选项卡布局动态添加和删除片段页面

我需要根据服务器配置文件在运行时将片段添加到 viewpager2 以及选项卡。我见过的大多数 viewpager2 资源都展示了使用新 TabMediator 选项卡布局的静态 viewpager2。我正在跳过 viewpager,因为我需要添加 viewpager2 支持的 RTL 和垂直滚动。

我最关心的是如何在添加和删除片段时跟踪特定页面/片段的索引。以教程和代码为例。

0 投票
1 回答
5391 浏览

android - Android TabLayout + ViewPager2 更改选项卡而不加载其间的所有选项卡

在我的应用程序中,我有一个ViewPager2和一个TabLayout. 该应用程序由 4 个选项卡组成。第三个动态加载列表片段。

我在打开第 4 个选项卡时遇到问题,但前提是我之前没有打开第 3 个选项卡。例如,这将崩溃:

打开应用程序,显示第一个选项卡。单击第 4 个选项卡。=>应用程序将崩溃并出现以下错误:

但是,如果我按以下方式进行:

打开应用程序,显示第一个选项卡。单击第三个选项卡。单击第 4 个选项卡。=>应用程序不会崩溃

看起来当我更改选项卡时,它会“扫过”当前选项卡和单击的选项卡之间的所有选项卡,从而导致片段开始初始化。

这是第三个片段的代码:

我的ListFragment

这是我的ViewPagerAdapter的代码:

以及包含视图寻呼机的Activity :

有没有办法防止从 1 到 4 时加载选项卡 2+3,或者,如果没有,我该如何防止这个错误?

编辑/解决方法:

好的,所以我找到了解决此错误的方法。我现在没有使用 ViewPager2 和 TabLayout 的组合,而是使用 BottomNavigation 来获得完全相同的结果,但没有滑动效果。就我而言,它可以工作,因为我只需要 4 个选项卡,但是对于具有更多选项卡的更复杂的应用程序,它不起作用,所以如果有人知道如何修复它......

0 投票
1 回答
2387 浏览

android - ViewPager2 禁用过渡动画

我有 ViewPager2 与 TabLayout 连接。其他引用 ViewPager 的帖子提供覆盖 setCurrentItem(position, false) ,其中 false 禁用平滑滚动。但是,TabLayoutMediator 调用 onTabSelected(TabLayout.Tab tab),后者调用 viewpager.setCurrentItem(postion, true)。如果 TabLayoutMediator 和 ViewPager2 是最终的,我该如何覆盖此行为?

已经尝试过:

并像这样覆盖 onTabSelected:

0 投票
2 回答
5531 浏览

android - 带有包含recyclerview的片段的Android ViewPager2不滚动

我正在使用 ViewPager2 和 FragmentStateAdapter 来绑定片段。我的每个片段都有 3 个垂直布局的回收站视图。问题是我无法在片段内滚动回收器视图,而且当我尝试垂直滚动内容时,视图寻呼机会更改选项卡。如何解决这个问题?

0 投票
1 回答
4942 浏览

android - 如何使 ViewPager2 看起来像一个带有“幻灯片”页面转换器的无限循环?

我正在寻找一个无限循环来在 ViewPager2 中显示图片。

在图片之间,最后一个和第一个项目之间,以及第一个和最后一个项目之间有一个“幻灯片”页面转换器(就像我认为的默认值)。

我发现的困难是:

  • 没有Integer.maxValue物品,
  • 在第一个和最后一个元素之间有一个真正的过渡,而不是一个setCurrentItem(x, false)不好看的。
0 投票
1 回答
71 浏览

java - 动画(textView)在片段状态适配器中的片段之间滑动时不断取消

  • 我正在 android studio (Java) 上开发一个应用程序
  • 我创建了一个 tabLayout,它使用 viewPager2 + Fragment State Adapter 在两个片段之间滑动
  • 在 fragment02 上,我为 textView 设置了动画。
  • 当我在片段上滑动时,动画会循环播放,这是应该的。
  • 但是,如果我从片段上滑下然后重新打开,动画将不再播放。
  • 我真的需要动画继续。

欢迎任何建议,我提前谢谢你:)

请注意,我对此很陌生。