をObserver pattern
とし、Fragments
とActivity
で使用するように作成しています。フラグメントが表示されているかどうかを知る方法
Subscribe
には、いくつかのフラグメントに関連付けられた複数のリスナーにメソッドがあります。フラグメントが表示されている場合は
私のカスタムイベントリスナーは、次の操作を行います:
- はそのフラグメントに対する
subscribed
されているリスナーをfind all
ます。 - その
fragment
のpending event
を確認してください。 Fire
fragment
のいずれかに対応する任意のpending event
です。
フラグメントまたはアクティビティが現在の表示になっていることをどのように知ることができますか。そのフラグメントやアクティビティがすぐに表示されるように、私は保留中のイベントを放つことができますか?
私の実装の概要:
//Defining the Interface
public class MyCustomObject {
// Step 1 - This interface defines the type of messages I want to communicate to my owner
public interface MyCustomObjectListener {
// These methods are the different events and
// need to pass relevant arguments related to the event triggered
public void onDataChange(MyCustomObject obj);
// or when data has been loaded
public void onDataDestroy(MyCustomObject obj);
}
}
// Create Listener Setter
public class MyCustomObject {
// Step 2 - This variable represents the listener passed in by the owning object
// The listener must implement the events interface and passes messages up to the parent.
private MyCustomObjectListener listener;
// Constructor where listener events are ignored
public MyCustomObject() {
// set null or default listener or accept as argument to constructor
this.listener = null;
}
// Assign the listener implementing events interface that will receive the events
public void setCustomObjectListener(MyCustomObjectListener listener) {
this.listener = listener;
}
}
//Implement Listener Callback
public class MyParentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
// Create the custom object
MyCustomObject object = new MyCustomObject();
// Step 4 - Setup the listener for this object
object.setCustomObjectListener(new MyCustomObject.MyCustomObjectListener() {
@Override
public void onDataChange(MyCustomObject obj) {
// Code to handle on data change event
}
@Override
public void onDataDestroy(MyCustomObject obj) {
//Code to handle onDestroy event.
}
});
}
}
問題
は今Event1
を想定---- --->Fragment1 view
-----とでsubscribed
を取得同じEvent1
はfired/publish
----> fragment2ビューで取得します
したがって、when does Fragment1 get in view again
を知っているので、Fragment1が表示されたらすぐにfire
Event1
とすることができます。私は、ライブラリを実装しています
は、このように私たちは、それぞれの断片/アクティビティのイベントのバグのために登録する必要が最初GreenRobot
のように実装いくつかのEventBusライブラリで何が起こるかに近いソリューションを必要NOTE
。フラグメントは、すぐフラグメントがビューに入るよう考慮し、火災のイベントで取得するときEventBusでpostStickyイベントの実装が知っているどのよう
//Define events
public class MessageEvent { /* Additional fields if needed */ }
//Prepare subscribers: Register your subscriber (in your onCreate or in a constructor):
eventBus.registerSticky(this);
//Declare Subscriber method
@Subscribe
public void onDataChange(MessageEvent obj) {/* Do something */};
//Post events:
eventBus.postSticky(event);
。?