Android RoboGuice 使用指南(19):发送接收Events

Roboguice 提供了对Context 生命周期相关的事件的send 和receive ,系统缺省支持的事件为:

  • OnActivityResultEvent
  • OnConfigurationChangedEvent
  • OnContentChangedEvent
  • OnContentViewAvailableEvent
  • OnCreateEvent
  • OnDestroyEvent
  • OnNewIntentEvent
  • OnPauseEvent
  • OnRestartEvent
  • OnResumeEvent
  • OnStartEvent
  • OnStopEvent

一个简单的例子如下:

public class MyActivity extends RoboActivity {
 // You must "register" your listener in the current
 // context by injecting it.
 // Injection is commonly done here in the activity,
 //but can also be done anywhere really.
 @Inject protected MyListeners myListeners;
 
}
 
// In this example, all the listeners are in a
// MyListeners class, but really they could
// be anywhere as long as it's registered.
// You can even put the listeners directly into
// your activity classes if you like!
class MyListeners {
 
 // Any method with void return type and a
 // single parameter with @Observes annotation
 // can be used as an event listener.
 //This one listens to onResume.
 public void doSomethingOnResume(
 @Observes OnResumeEvent onResume ) {
 Ln.d("Called doSomethingOnResume in onResume");
 }
 
 // As you might expect, some events can
 //have parameters.  The OnCreate event
 // has the savedInstanceState parameter that
 //Android passes to onCreate(Bundle)
 public void doSomethingElseOnCreate(
 @Observes OnCreateEvent onCreate ) {
 Ln.d("onCreate savedInstanceState is %s",
 onCreate.getSavedInstanceState())
 }
 
 // And of course, you can have multiple
 //listeners for a given event.
 // Note that ordering of listener execution
 //is indeterminate!
 public void xxx( @Observes OnCreateEvent onCreate ) {
 Ln.d("Hello, world!")
 }
}

有关Events的注意事项如下:

  • 在Context中使用@Inject定义事件的Listener.
  • Event只能在某一特定的Context(Activity)中传送,不能跨Context发送,接受。
  • Event除了提供上面列出的Context相关事件外,也可以使用自定义的事件。
  • @observes 只能应用到方法上,而不能应用到构造函数上。

下面使用一个自定义事件MyEvent,通过observer 这个自定义事件来发送,接收自定义事件。

public class EventDemo extends RoboActivity {
 
 @Inject protected EventManager eventManager;
 @InjectView (R.id.button) Button button;
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.eventdemo);
 button.setOnClickListener(mGoListener);
 }
 
 private OnClickListener mGoListener = new OnClickListener()
 {
 public void onClick(View v)
 {
 eventManager.fire(EventDemo.this,new MyEvent());
 }
 };
 
 protected void handleEvent(@Observes MyEvent event){
 Toast.makeText(this, "Custom event",
 Toast.LENGTH_LONG).show();
 }
}
 
class MyEvent{
 //put any memeber you want here.
}

Android RoboGuice 使用指南(19):发送接收Events_第1张图片

本例下载


 

你可能感兴趣的:(android,Class,button,events)