片段创建后的片段间通信

时间:2014-05-22 08:59:21

标签: android android-fragments

在我的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

2 个答案:

答案 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();
        }
    }
});