问题标签 [fragmentstateadapter]

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 投票
0 回答
324 浏览

android - ViewPager2 PagedList DiffUtil FragmentStateAdapter 中的片段重新创建时数据未刷新

我试图在片段内的 ViewPager 选项卡中显示两组产品列表。我也在使用分页库。能够加载数据并且分页也可以正常工作。如果我在同一个片段中,我还能够使分页列表数据无效并重新加载。

从这个选项卡布局移动到另一个片段并返回到这个片段。我能够在两个选项卡中看到旧数据。但是重新加载/分页没有发生。使数据失效后,获取的新数据不显示。回收站视图包含旧数据。我从 API 获取数据并执行提交列表 - Diff Utils 也被调用。但是没有调用 ProductPagedListAdapter - 回收器视图方法。

我觉得重新创建片段适配器正在重新创建,但它并没有绑定到现有的回收器视图。我尝试了retainInstance,它不起作用。我在视图寻呼机中使用相同 ProductFragment 的两个不同实例。由于一些问题,我正在观察来自 Parent Fragment ProductTabFragment 的数据并将数据发送到 ViewPager 片段。

对此的任何帮助将不胜感激。

ViewPager 片段

寻呼机适配器

分页列表适配器

查看模型

分页列表的数据源

0 投票
1 回答
700 浏览

java - 使用 FragmentStateAdapter 实现 ViewPager2 的问题

我来自 ViewPager 和 FragmentPagerAdapter,它有一个非常直接的实现,就像这样。

父片段

Android 建议远离 ViewPager 并弃用心爱的 FragmentPagerAdapter,现在我正在尝试将 ViewPager2 与 FragmentStateAdapter 一起使用,但在其工作方式方面存在很多困惑和困难。

这是我的实现

通常我们可以立即从createFragment方法中的列表中返回片段,但是有一个巨大的混乱,所以我试图扩展它以查看发生了什么。令我感到惊讶的是,何时createFragment被调用一 (1) 次,而不是有多少可用片段返回,getItemCount因此只显示一个片段,并且更令人困惑,我所谓的第一个片段 (AssetFragment) 放在最后位置和前两个片段是空屏幕,我不知道这两个片段来自哪里。

父片段

这就是我的 Fragment 的样子,基本上没什么特别的

有人可以告诉我这种荒谬的行为是什么吗?PS我试图做一些日志,getItemCount它被调用了23次只是为了一个3片段?

0 投票
0 回答
368 浏览

android - FragmentStateAdapter createFragment - 你什么时候真正需要创建新的片段/什么时候片段被删除?

我一直在学习如何使用 FragmentStateAdapter 和 ViewPager2,我遇到的问题之一是在createFragment. 我知道必须返回一个片段,但是一些示例应用程序有一个片段列表传递给适配器并执行以下操作:

而其他示例在方法中创建片段,例如:

我觉得第二种选择更安全,我想证明第一种方法会很糟糕,但是在使用第一种选择时我看不到任何不良行为/问题。例如,我已经走到了极端,并设置了一个视图寻呼机来使用 100 个片段和一个offscreenPageLimit设置为 1 的值!在这些情况下,片段视图更频繁地重新创建,但createFragment在查看之前已滑过的旧片段时从未调用过。

我在这里错过了一些简单的东西吗?什么时候需要重新创建片段?

0 投票
2 回答
200 浏览

android - BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 的替换

androidx.fragment.app.FragmentStatePagerAdapter已弃用,并敦促开发人员切换到androidx.viewpager2.adapter.FragmentStateAdapter

我们如何使用 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 提供的 FragmentStateAdapter 获得相同的功能?

下面的代码现在已被弃用

0 投票
1 回答
94 浏览

android - ViewPager2:以编程方式选择特定片段

我正在尝试以编程方式选择特定片段,例如 ViewPager2 中的第二个或第三个片段。它无法正常工作。有时有效,有时无效。虽然它每次都适用于 TabLayout。

我试过的:

  1. 我试过使用ViewPager2.post 之类的paymentViewpager.post { paymentViewpager.currentItem = 1 }
  2. 尝试添加回调paymentViewpager.setCurrentItem(tab.position, true)TabLayoutMediator
  3. 我已经仔细检查了我在paymentViewpager.setCurrentItem设置适配器后是否正在调用。

代码如下。

在 Activity 的 onCreate 中

当 API 响应一段时间后,我需要选择 ViewPager2 的 2nd Fragment。下面的代码在该函数中执行。

我在这里遇到了同样的问题,但尚未接受答案。任何帮助,将不胜感激。

0 投票
0 回答
42 浏览

android - ViewPager2 和 FragmentStateAdapter 未在 notifyDataSetChanged() 上更新

我按照教程使用 ViewPager2 和 FragmentStateAdapter 创建了一个选项卡布局。在我的适配器中,我有一个 ArrayList,其中包含片段的数据,然后我根据片段的位置以不同的方式传递这些数据。我使用参数传递数据,与教程中描述的相同。

数据第一次正确传递,然后我从 DemoCollectionAdapter(或初始化适配器的 Activity)更新数据。更新数据后,我调用 notifyDataSetChanged() 但片段中的数据没有更新。

我还尝试通过覆盖我的 Fragment 中的 onResume 方法来重新设置我的 Fragment 中的 TextViews 文本,这对于我的 7 个片段中的 5 个都很好,这很奇怪。该数组enabledScheduleOnViewCreated方法中的参数设置。

我是否以不适当的方式更新片段的数据?Android的教程似乎没有提到如何更新数据。

注意 这个问题是不同的,因为它使用 ViewPager 而不是 ViewPager2 和 PagerAdapter 而不是 FragmentStateAdapter。

0 投票
0 回答
43 浏览

android - 如何为 viewpager2 片段设置自定义标签?

如何为 viewpager2 片段设置自定义标签?

如何为 viewpager 片段设置标签?

上述问题提供了答案ViewPager。但这怎么能做到ViewPager2呢?

0 投票
0 回答
31 浏览

android - 如何更新 ViewPager 适配器/FragmentStateAdapter?

如何更新我发送到 Fragment 以显示在 RecycleReview 中的数据?并更改 UI

当我使用 swipeRefreshlayout 时,数据将来自 Room 并发送到 Adapter 和 notifyDataSetChange

但 notifyDataSetChange 不起作用,我的适配器未更新

这是我显示 viewPager 的主要片段

这是我的 viewPager 适配器

}

这是我展示 recyclerView 的片段

}

0 投票
1 回答
330 浏览

java - 如何删除 ViewPager2 中的无用片段

正确交换时如何销毁retain Fragmentsunused FragmentsFragment编号为 1-4) 。ViewPager2我只想retain one Fragmentvisible Fragment(片段5)的左边?

在 ViewPager2 中保留片段

在 ViewPager 中保留 Fragment(旧版本)

0 投票
1 回答
201 浏览

android - 在`FragmentStateAdapter`中覆盖`containsItem`和`getItemId`的目的是什么?

containsItem覆盖和getItemIdin的目的是什么FragmentStateAdapter

如果将新列表传递给FragmentStatePagerAdapter实现并调用,是否需要这些覆盖notifyDataSetChanged

从文档中,如果基础数据集正在更改,则似乎两个覆盖都是必需的,并且您需要调用notifyDataSetChanged?

例如,这是我的实现

现在我可以摆脱getItemIdand了containsItem吗?还是离开他们?怎么样getItemCount