2014-10-28 31 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