Roboguice 提供了對Context 生命周期相關的事件的send 和receive ,系統預設支持的事件為:
一個簡單的例子如下:
- 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的注意事項如下:
下面使用一個自定義事件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.
- }
本例下載