2014-10-28 36 views
0

同样的结果有两个片段 我打电话从片段1服务我在片段1 ResultReceiver监听到的结果和onReceiveResult将调用方法1()倾听来自不同的Android碎片

我想在片段2 ResultReceiver听相同的反应onReceiveResult将调用方法2()

我怎样才能做到这一点?

回答

1

你可以指定一个接口:

interface Receiver { 
    void onResult(); 
} 

让你的两个片段实现这个接口。片段1的实现调用方法1(),和Fragment2的实现调用方法2():

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

然后指定广播接收器作为一个独立的(或内部静态)类,使得片段1和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(); 
     } 
    } 
} 
+0

感谢您的时间。试过这个实现,但是现在只有Fragment中的方法被调用。片段2仅替换片段1的一部分。不知道这与这有什么关系!不管怎么说,多谢拉。 – HasaniK 2014-10-29 03:14:56

+0

*现在只有片段1中的方法被调用了 – HasaniK 2014-10-29 06:37:41

+0

您是否记得在Fragment2中注册接收器?如果您提供代码,我可以帮助您。 – 2014-10-29 18:45:30

1

我不认为你可以同时收到两个不同片段的结果。 但有很多方法可以实现这一点.. 1. 我相信最简单的方法将是使用对象引用.. 有两种可能性..要么在片段2中创建一个静态方法,并从片段1调用它onReceiveResult()。或者在片段1和片段2中创建片段2的对象,将其分配为与片段1创建的实例相同。然后,只需调用片段1.

2. 从onReceiveResult object_of_frgament2.method2()()使用interface.Create定制接口,使片段2实现该接口和在片段1创建接口的一个实例 和onReceiveResult()中的Fragment1可以调用接口方法。

在实现接口时,可以在接口方法中得到片段2中的结果。 只需从函数调用method2()....

3.使用广播接收器.. 创建一个自定义广播接收器,并制作需要结果的所有片段/活动来收听它。并在片段1的onReceiveResult()刚刚播出的结果..

我相信还是有其他的方法来做到这一点..

+0

谢谢你的时间!在所有选项中,我想选项2套房最适合我的要求。 +1给出的选项 – HasaniK 2014-10-29 03:13:15

1

只是传递到您的服务两个不同的ResultReceiver的...如果该服务已经启动,调用startService(意向)再次只是让你打电话onStartCommand(...),然后你可以设置每次您resultReciever。所以如果你愿意的话,你可以保留一系列的resultreciever。

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

+0

谢谢你的时间。 +1的“观察者”模式。 – HasaniK 2014-10-29 03:15:47

+0

你也可以接受答案 – j2emanue 2014-10-29 13:48:39