在 ViewPager 中重新加载或通知 Fragment 的数据

Posted

技术标签:

【中文标题】在 ViewPager 中重新加载或通知 Fragment 的数据【英文标题】:Reload or notify Fragment's data in ViewPager 【发布时间】:2014-11-05 15:38:14 【问题描述】:

我有[main]Fragment,里面有两个ViewPagers。每个ViewPager 都包含几个FragmentsViewPagerFragments[main]Fragment 获取数据到他们的ListViews。我需要更新所有ListViews 中的数据,这些数据来自[main]Fragment


我试图删除当前的[main]Fragment 并添加新的(重新加载),但是当我在.supportFragmentManager() 中调用.remove([main]Fragment).detach([main]Fragment) 方法时[main]Fragment 并没有破坏或分离,它只是隐藏,我无法添加新的,只需将.atach([main]Fragment) 设为当前...重新加载活动是个坏主意。请帮帮我。

【问题讨论】:

你用过 childFragmentManager 吗? 这是一个困难的问题,因为它有很多形式,可以用很多方法完成。我在下面包含了一个内容观察者解决方案,因为您有一个 neto 用户 ID。 阿希尔,是的。对于所有子片段。 【参考方案1】:

Content Observers

这是一个简单的 URI,该链接未显示如何操作。将它放在进行数据更改的类中,以便任何片段都可以通过 ClassName.CONTENT_URI 静态访问它。

private static final String BASE_PATH = "Imustdorefresh";//see content providers
private static final String AUTHORITY = "somethinguniquehereprobablyappcomname";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
            + "/" + BASE_PATH);

这段代码在onresume的片段中看到链接不要忘记在onpause中取消注册

getContentResolver().
      registerContentObserver(
            CONTENT_URI,
            true,
            yourObserver);

//yourObserver 是刷新片段的代码 do stuff here code

在更改数据的这段代码中,每次数据更改后都会调用 contentresolver notify 方法。内容解析器将调用片段中注册的观察者。

getContext().getContentResolver().notifyChange(CONTENT_URI,null);

有关详细信息,请参阅内容提供者和内容观察者。有关Content Provider的更多详细信息

【讨论】:

这对我来说是错误的解决方案。我必须获取 ArrayList 并在主片段中更新它,然后子片段获取此 ArrayList 的一部分并将它们显示在我需要更新的列表视图中。如果你知道如何做这样的事情,请帮助我。 也许更新主片段数组列表并通知它寻呼适配器?但是当我这样做时,子片段什么也没做......也许我做错了什么。 此解决方案适用于不同的应用程序,因此它可以轻松适用于任何级别的嵌套子片段。关键是内容解析器处理提供者和观察者之间的消息传递。 根据新数据,ViewPager 可以制作或多或少的片段。也许有一种方法可以重新加载 viewpager、pageradapter 或主要片段,因为我认为您的方法不会这样做( @AskQuestion 你说我需要更新列表视图,这就是这个代码示例的目的。现在您要更新 viewpager。你必须向我们展示一些真实的代码,希望我会相应地更新我的答案,否则会有新用户加入。

以上是关于在 ViewPager 中重新加载或通知 Fragment 的数据的主要内容,如果未能解决你的问题,请参考以下文章

底部导航片段中的 Viewpager2

通过按钮更改 viewpager 片段 Click

更新 viewpager 内的 Fragment 视图而不重新加载数据

怎么让android中 viewpager 不预先加载?

ViewPager2 中未显示图像(片段重新打开时)

当 ViewPager 中的 Fragment 从 BackStack 保留时 WebView 重新加载