簡體   English   中英

聆聽來自不同Android片段的相同結果

[英]Listen to same result from different Android Fragments

我從片段1調用服務有2個片段。片段1中有一個ResultReceiver,它監聽結果,並且onReceiveResult將調用method1()

我希望片段2中的ResultReceiver偵聽相同的響應,但是onReceiveResult將調用method2()

我該如何實現?

我認為您無法同時收到兩個不同片段的結果。 但是有很多方法可以實現這一點。1.我相信最簡單的方法將是使用對象引用。有兩種可能。要么在Fragment 2中創建一個靜態方法,然后從onReceiveResult()的fragment 1中調用它。 或在片段1中創建片段2的對象,然后從片段2中創建該對象,並指定它與fragment1創建的實例相同。 然后只需從片段1的onReceiveResult()調用object_of_frgament2.method2()。

2.使用interface。創建一個自定義接口,並使Fragment 2實現該接口,並在Fragment 1中創建該接口的實例。在Fragment1的onReceiveResult()中,您可以調用接口方法。

在實現接口時,您可以在接口方法的片段2中獲得結果。 只需從函數調用method2()即可。...

3.使用廣播接收器。創建一個自定義廣播接收器,並制作所有需要結果的片段/活動來收聽它。 並且在Fragment1的onReceiveResult()中只是廣播結果。

我相信還有其他方法可以做到。

您可以指定一個接口:

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

只需將兩個不同的ResultReceiver傳遞到您的服務中...如果服務已經開始,再次調用startService(Intent),只需使您調用onStartCommand(...),然后您就可以每次設置resultReciever了。 因此,您可以根據需要保留一系列resultreciever。

這樣說,我永遠不會這樣。 研究Java觀察者模式。 Java具有Observer模式的默認實現。 這是一個鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM