有2个碎片 我在Fragment 1中调用了一个服务。我在Fragment 1中有一个ResultReceiver来监听结果, onReceiveResult 会调用 method1()。
我希望片段2中的ResultReceiver听取相同的响应,但 onReceiveResult 将调用 method2()
我怎样才能做到这一点?
答案 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