同樣的結果有兩個片段 我打電話從片段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