所以我目前有一个有4个标签(片段)的应用程序。它们按顺序是片段A,B,C,D。
片段A是第一个打开的视图(与B一起,因为viewPager在当前视图之前和之后加载视图)。
当我单击片段A中的按钮时,它会将数据发送回MainActivity,然后将该数据发送到片段B和C。
然而,这是问题发挥作用的地方。由于片段B已被调用,因此一旦我单击按钮并发送数据,View就不会更新,但片段C是因为以前没有调用过该视图。
有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
你可以通过几种方式做到这一点。
只需将数据设置为片段并让其更新其视图
让所有像B和C这样的片段自己注册以接收来自MainActivity的数据,当MainActivity获取数据集时,告诉所有已注册的接收者新数据
重新创建片段
使用事件总线并告知所有新数据和MainActivity的子程序,片段B会收到新数据的通知。片段C将在MainActivity
我认为这个清单是无穷无尽的。
这里的关键是片段需要从actvitiy获取数据以及活动更新。在这种情况下,您需要从onCreateView和自己的updateUI()函数中断UI更新行为。然后可以从onCreateView调用updateUI(MyData),并在片段上的setMyData()中调用。只需确保检查setMyData中的isAdded标志。
这几乎说明了一切: http://developer.android.com/training/basics/fragments/communicating.html
答案 1 :(得分:1)
我使用了一个简单的片段通信器,它允许活动调用片段,并且片段与活动对话。
您可以根据在活动中调用方法,使用新数据更改视图。我这样做的方法是在活动中设置片段然后将它们传递给页面适配器,这样我就可以调用片段中的方法并在片段上实现fragmentcommunicator接口。
如果你愿意,你可以诚实地避免使用界面,但是如果要在所有片段中包含相同的方法来与它们交谈,那么这是最简单的方法。
如果您显示代码,我可以向您展示一个简单的示例。