在我的Acitivty中,我会根据用户数据不断切换片段。
现在让我说我有两个片段A&乙
现在我希望片段A与B通信。
在某些条件下,片段可能会调用托管活动来将当前片段替换为片段B(使用提交操作作为工作)。
现在我希望从frag A到frag B发生一些通信(从frag A调用frag b上的方法) 但是,碎片B的这种方法需要发生碎片B的整个创建过程,我不知道什么时候会发生,因为这是异步发生的。
我怎样才能实现这样的场景:Frag A应该帮助创建frag B然后在frag B上调用一个方法。
我已经检查了片段间通信主题http://developer.android.com/training/basics/fragments/communicating.html,但更多的是如何替换片段。没有关于通信后如何发生的信息。
欢呼声, Saurav
答案 0 :(得分:1)
一种可能的方法可能是使两个片段都实现一个公共接口(让我们称之为Subscriber
)。
界面应如下所示:
public interface Subscriber {
void callMe();//to be used by the fragment who gets called
void theOtherFragmentIsReady(Subscriber sub);//to be used by the fragment that will perform the call.
}
在托管片段的活动中,添加以下方法:
public void fragmentCreated(Subscriber sub) {
Subscriber fragmentA = ...;//retrieve fragment A
fragmentA.theOtherFragmentIsReady(sub);//let the fragmentA that fragment B has been created
}
最后,在片段的onCreated()方法中添加:
public void onCreate() {
((YourActivity)getActivity()).fragmentCreated(this);
}
答案 1 :(得分:0)
你可以随时转到你的活动getActivity()
,询问你是否有想要与findFragmentByXyz()
沟通的片段并用它做你的东西(或创建它,如果它还没有创建)
如果你想确定,你与其他片段进行通信,当它准备就绪时(例如当它的UI准备就绪时),你可以在片段B的UI上发布'Runnable'并通知你的Activity / Fragment A /无论什么,当你准备好了。
getView().post(new Runnable() {
@Override
public void run() {
if (getActivity() != null) { // or whatever
registerComponents();
}
}
});