如何知道片段何时在视图中

时间:2016-09-10 20:13:39

标签: java android android-fragments observer-pattern

我正在使用Event Listener Library创建Observer pattern,以便在Android FragmentsActivity中使用。

将会有一个方法将Subscribe几个侦听器关联在多个片段中。

  

当片段可见时,我的自定义事件监听器将执行以下操作:

  1. find all将为该片段subscribed的监听器。
  2. 检查pending event的任何fragment
  3. Firepending event相关联的任何fragment
  4. 我怎么知道片段或活动何时在当前视图中。这样,我可以在片段或活动进入视图时立即触发待处理的事件吗?

      

    我的实施摘要:

    //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 ----获得subscribed ---> Fragment1 view -----和Event1相同的fired/publish获得了{&1}} fragment2视图

    那么我将如何知道when does Fragment1 get in view again以便在Fragment1进入View后我fire可以Event1

    注意

    我正在实现一个库,因此我需要一个解决方案,接近实现的几个EventBus库,如GreenRobot

    首先我们必须在每个片段/活动中注册事件错误。

     //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 个答案:

答案 0 :(得分:1)

<强> 1。我怎么知道片段或活动何时在当前视图中。这样,我可以在片段或活动进入视图时立即触发待处理的事件吗?

不要担心片段或活动何时处于查看状态。利用组件的生命周期。在oncreate或onResume上注册并取消注册onDestroy上的订阅或取消暂停。

<强> 2。 eventBus中的postSticky事件实现如何知道片段何时进入视图并在片段进入视图时立即触发事件。

EventBus将事件存储在队列中。当组件注册时,发布者将事件传递给组件的匹配方法。