我正在使用Event Listener Library
创建Observer pattern
,以便在Android Fragments
和Activity
中使用。
将会有一个方法将Subscribe
几个侦听器关联在多个片段中。
当片段可见时,我的自定义事件监听器将执行以下操作:
find all
将为该片段subscribed
的监听器。pending event
的任何fragment
。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.
}
});
}
}
问题
现在假设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事件的实现如何知道片段何时进入视图并在片段进入视图时立即触发事件。
答案 0 :(得分:1)
<强> 1。我怎么知道片段或活动何时在当前视图中。这样,我可以在片段或活动进入视图时立即触发待处理的事件吗?
不要担心片段或活动何时处于查看状态。利用组件的生命周期。在oncreate或onResume上注册并取消注册onDestroy上的订阅或取消暂停。
<强> 2。 eventBus中的postSticky事件实现如何知道片段何时进入视图并在片段进入视图时立即触发事件。
EventBus将事件存储在队列中。当组件注册时,发布者将事件传递给组件的匹配方法。