2016-09-10 8 views
3

을 작성하여 Observer pattern을 사용하여 Android FragmentsActivity에 사용할 수 있습니다.조각이 보이는 시점을 알 수있는 방법

Subscribe 여러 파편에 연결된 여러 수신기가 있습니다. 조각을 볼 때

내 사용자 지정 이벤트 리스너는 다음을 수행합니다 :

  1. 는 조각에 대한 subscribed 된 리스너를 find all 것이다.
  2. 해당 fragment에 대해 pending event을 확인하십시오.
  3. Fire 어떤 pending event도 해당 fragment과 관련됩니다.

조각이나 활동이 현재보기에있는 경우 어떻게 알 수 있습니까? 그 조각이나 활동이 보일 때 곧 보류중인 이벤트를 발생시킬 수 있습니까?

내 구현 요약 :

//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. 
      } 
     }); 
    } 
} 

문제 이제

가에 subscribed를 얻을 ---- Event1 가정 --->Fragment1 view -----와 같은 Event1은 ----> fragment2보기에서 fired/publish을 얻습니다.

그러면 when does Fragment1 get in view again을 어떻게 알 수 있습니까? 그러면 Fragment1이 표시되면 fireEvent1이 표시됩니다. 나는 도서관을 구현하고

따라서 나는 우리가 각 조각/활동 이벤트 버그를 등록해야 첫번째 GreenRobot

처럼 구현 여러 EventBus 라이브러리에 무슨 일에 가까운 솔루션을 필요로 참고

.

//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); 

어떻게 조각이보기 및 화재 행사에 얻을 때 EventBus에서 postSticky 이벤트 구현 즉시 조각이보기에 얻을로 알고 않습니다.?

답변

1

1. 조각이나 활동이 현재보기에 언제 있는지 어떻게 알 수 있습니까? 그 조각이나 활동이 보일 때 곧 보류중인 이벤트를 발생시킬 수 있습니까?

조각이나 활동이보기에 걱정할 필요가 없습니다. 구성 요소의 라이프 사이클을 활용하십시오. oncreate 또는 onResume에 등록하고 onDestroy에서 구독을 등록 취소하거나 일시 중지 해제하십시오.

2.EventBus의 postSticky 이벤트 구현은 프래그먼트가 뷰에 들어가면 파편이 뷰에 도착하자 마자 이벤트를 발생시키는 것을 어떻게 알 수 있습니까?

이벤트 버스는 이벤트를 대기열에 저장합니다. 구성 요소가 게시자를 등록하면 해당 구성 요소의 일치하는 메서드에 이벤트를 전달합니다.