代码有两个主要问题。
首先,我看了一下您之前的一个问题,我发现您使用了:
FragmentManager f = ((FragmentActivity) getActivity()).getSupportFragmentManager();
初始化
ViewPager
。如果嵌入
查看寻呼机
(连同成为嵌套片段的片段)
Fragment
那么您必须使用
FragmentManager
由返回
getChildFragmentManager()
方法
碎片
class)而不是上面的行。如果您已经使用
getChildFragmentManager()
忽略此部分,否则更改代码以使用它。
其次,更新
查看寻呼机
前面已经讨论过(尽管您使用嵌套片段,但其过程相同),您需要考虑两种情况,即
查看寻呼机
的片段可能是:
-
片段要么是当前可见片段,要么是可见片段左侧/右侧最接近的片段(例如,如果位置0是当前可见的片段,则内存中有两个片段:位置0和位置1)。这些片段已经构建了它们的视图,并准备好向用户显示,您需要直接更新它们的数据/视图(例如,通过调用一些setter方法)。访问此片段的最简单方法是使用
this question
(这是非常相关的,还要注意,您使用的是嵌套片段,因此
getFragmentManager()
将被替换为
getChildFragmentManager()
)
-
除上述位置外的任何其他位置。要处理这种情况,您应该从
查看寻呼机
检索其
onCreateView()
如果用户向该片段滑动,则将调用该片段。一些示例代码:
// in the onCreateView()
YourParentFragmentClass parent = (YourParentFragmentClass) getParentFragment();
// parent is the Fragment holding the ViewPager and you can use further use it to
// get data
来自
查看寻呼机
应该有这段代码来处理数据更新。例如,如果您滑动到第三个片段,然后更新数据,则应该直接更新片段2和3。然而,片段1将在
查看寻呼机
将重新创建其视图(当用户从片段3滑动到片段2时),此时,上述代码片段将从父片段中获取新数据,这将是最新的数据片段。
您也不需要将数据作为参数传递到
newInstance()
方法