同样的结果有两个片段 我打电话从片段1服务我在片段1 ResultReceiver监听到的结果和onReceiveResult将调用方法1()。倾听来自不同的Android碎片
我想在片段2 ResultReceiver听相同的反应但onReceiveResult将调用方法2()
我怎样才能做到这一点?
同样的结果有两个片段 我打电话从片段1服务我在片段1 ResultReceiver监听到的结果和onReceiveResult将调用方法1()。倾听来自不同的Android碎片
我想在片段2 ResultReceiver听相同的反应但onReceiveResult将调用方法2()
我怎样才能做到这一点?
你可以指定一个接口:
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();
}
}
}
我不认为你可以同时收到两个不同片段的结果。 但有很多方法可以实现这一点.. 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()刚刚播出的结果..
我相信还是有其他的方法来做到这一点..
谢谢你的时间!在所有选项中,我想选项2套房最适合我的要求。 +1给出的选项 – HasaniK 2014-10-29 03:13:15
只是传递到您的服务两个不同的ResultReceiver的...如果该服务已经启动,调用startService(意向)再次只是让你打电话onStartCommand(...),然后你可以设置每次您resultReciever。所以如果你愿意的话,你可以保留一系列的resultreciever。
说,我绝不会这样做。研究Java观察者模式。 Java有Observer模式的默认实现。 Here is a link
感谢您的时间。试过这个实现,但是现在只有Fragment中的方法被调用。片段2仅替换片段1的一部分。不知道这与这有什么关系!不管怎么说,多谢拉。 – HasaniK 2014-10-29 03:14:56
*现在只有片段1中的方法被调用了 – HasaniK 2014-10-29 06:37:41
您是否记得在Fragment2中注册接收器?如果您提供代码,我可以帮助您。 – 2014-10-29 18:45:30