从不同的Android片段中听取相同的结果

时间:2014-10-28 00:44:26

标签: android

有2个碎片 我在Fragment 1中调用了一个服务。我在Fragment 1中有一个ResultReceiver来监听结果, onReceiveResult 会调用 method1()

我希望片段2中的ResultReceiver听取相同的响应,但 onReceiveResult 将调用 method2()

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

我认为你不能同时收到两个不同的片段。 但有很多方法可以实现这一目标.. 1。 我相信最简单的方法是使用对象引用.. 有两种可能性。在Fragment 2中创建一个静态方法,并从onReceiveResult()中的片段1中调用它。或者在片段1和片段2中创建片段2的对象,指定它与fragment1创建的实例相同。然后打电话 来自片段1的onReceiveResult()的object_of_frgament2.method2()。

2。  使用interface.Create自定义接口并使Fragment 2实现接口并在Fragment 1中创建接口的实例。 在Fragment1的onReceiveResult()中,你可以调用接口方法。

在实现接口时,您可以在接口方法中获取片段2中的结果。 只需从函数....

调用method2()

3.使用广播接收器.. 创建一个自定义广播接收器,并使需要结果的所有片段/活动收听它。并且在Fragment1的onReceiveResult()内只播放结果..

我相信还有其他方法可以做到这一点。

答案 1 :(得分:1)

您可以指定一个界面:

interface Receiver {
    void onResult();
}

让你的两个片段实现这个界面。 Fragment1的实现只调用method1(),而Fragment2的实现只调用method2():

public class Fragment1 extends Fragment implements Receiver {
    // Remember to register and remove the receiver (e.g. in onAttach and onDetach respectively).
    private MyReceiver mBroadcast = new MyReceiver(this);
    public void onResult() {
        this.method1();
    }
}

public class Fragment2 extends Fragment implements Receiver {
    // Remember to register and remove the receiver (e.g. in onAttach and onDetach respectively).
    private MyReceiver mBroadcast = new MyReceiver(this);
    public void onResult() {
        this.method2();
    }
}

然后将BroadcastReceiver指定为独立(或内部静态)类,以便Fragment1和Fragment2都能够实例化它:

public class MyReceiver extends BroadcastReceiver {
    private Receiver mFragment;
    public MyReceiver(Receiver fragment) {
        mFragment = fragment;
    }

    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(YOUR_ACTION) {
            mFragment.onResult();
        }
    }
}

答案 2 :(得分:1)

只需将两个不同的ResultReceiver传递给您的服务......如果服务已经开始再次调用startService(Intent),只需调用onStartCommand(...),然后每次都可以设置resultReciever。因此,如果需要,您可以保留一系列结果记录器。

说,我永远不会这样做。研究Java观察者模式。 Java具有Observer模式的默认实现。 Here is a link