在 ViewPager 中重新加载或通知 Fragment 的数据
Posted
技术标签:
【中文标题】在 ViewPager 中重新加载或通知 Fragment 的数据【英文标题】:Reload or notify Fragment's data in ViewPager 【发布时间】:2014-11-05 15:38:14 【问题描述】:我有[main]Fragment
,里面有两个ViewPagers
。每个ViewPager
都包含几个Fragments
。 ViewPager
的Fragments
从[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 的数据的主要内容,如果未能解决你的问题,请参考以下文章