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. }
本例下载