gpt4 book ai didi

android - 并非 ViewPager 的 fragment 中的所有 View 都会更新

转载 作者:行者123 更新时间:2023-11-30 03:47:31 25 4
gpt4 key购买 nike

我的 ViewPager 中有 3 个 fragment 。在我的 Fragment 中,我添加了静态 ToggleButtons。(静态,因为如果我想在我的 Fragment 类中的自定义方法中而不是在 onCreateView() 中使用 findViewById(),我没有找到 nullpointerexception 的解决方法)

在我的 MainActivity 中的 ViewPager 之外,我有一个重置按钮,它应该将所有 ToggleButton(在所有 3 个 fragment 上)重置为“未选中”。

每次我点击重置按钮时,只有当前页面和每个相邻页面得到更新。

例如

  • 当前页面:0 更新页面:0,1
  • 当前页面:1 更新页面:0,1,2
  • 当前页面:2 更新页面:1,2

我认为问题在于 FragmentPagerAdapter。 Documentation说:

Implementation of PagerAdapter that represents each page as a Fragment that is persistently kept in the fragment manager as long as the user can return to the page.

当我在第 2 页时,我无法直接返回到第 0 页,所以我认为第 0 页(= fragment 0)中的 View 不再存在内存中了?!那么如何访问 Fragment 中的 ToggleButtons,该 Fragment 目前不可见,也不是当前 Fragment 的邻居?有什么解决方法吗?

编辑:

我发现,实际上我的 ToggleButtons(在所有 fragment 上)的所有 checked() 值都会更新,但不会更新 fragment 的膨胀 View ,它们不可见且不相邻 fragment 。因此,当我返回到之前的 fragment 时,ToggleButtons 的 checked() 值将重置为上次 fragment 可见时的状态。奇怪...

例子:

  1. Page2 Activity - ToggleButton_Page2.checked() = true
  2. 切换到第 0 页
  3. 按下重置按钮。 Toast ToggleButton_Page2.checked() = false
  4. 切换回第 2 页(或已经在第 1 页)
  5. ToggleButton_Page2.checked() = true//应该是false

来源:

Example Source Code

最佳答案

So how can I access the ToggleButtons inside a Fragment that is not visible at the moment nor is a neighbor of the current Fragment ? Is there any workaround?

你的代码有很多问题,你应该多读一点关于Fragments的内容并在 ViewPager 中使用它们.

在重置和状态按钮中 OnClickListeners你写的听众_adapter.getItem(x);试图获得 Fragment 的句柄代表那个位置的页面。这将不起作用,因为简单地调用该方法将返回 Fragment新实例在那个位置而不是实际的 Fragment ViewPager使用(通过调用 getItem() 在前一刻)。调用 getItem() 后获得的新实例没有绑定(bind)到 Activity及其 onCreateView方法未被调用,因此它没有 View (访问它时会得到 NullPointerException)。然后你试图通过制作 ToggelButton 来解决这个问题作为 Fragment 中的静态字段这将作为字段将在 ViewPager 时初始化正确创建 Fragments在开始。但是你不应该这样做,静态字段包含对 Context 的引用。 (就像任何 View 一样)是危险的,因为您有泄漏 Context 的风险.

此外,与我上面所说的相关,您不需要传递 ContextFragment作为Fragment它与 Activity 相关联有 getActivity()返回对该 Activity 的引用的方法.

您不应访问 ViewPager 中的任何 fragment 它们不靠近可见 fragment (一个在可见位置的左侧/右侧,除非您不使用 setOffscreenPageLimit()ViewPager 方法)。 ViewPager具有提高性能的机制(如 ListView 所做的那样),因此它只会创建立即需要的内容,以便为用户提供流畅的滑动。

我对您的项目做了一些更改,check them out .如有其他问题,请在您的问题中发布相关代码。

关于android - 并非 ViewPager 的 fragment 中的所有 View 都会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com