OttoIntegration - WonderCsabo/androidannotations GitHub Wiki

Since AndroidAnnotations 3.0

Integrating Otto and AndroidAnnotations

  1. Add AndroidAnnotations to your project.
  2. Add the otto AA plugin to your project
  3. Add otto to your project.
  4. Create a singleton class for the bus that can be injected with AA using the @EBean annotation.
  5. Create the event class that will transit through the bus.
  6. Post a new event to the bus: bus.post( ...)
  7. Use @Subscribe annotation to get the published events.

The following code (taken from the CleanAndroidCode) shows you how an Activity notifies its Fragment that the title has been updated.

// Declare the bus as an enhanced bean
@EBean(scope = Scope.Singleton)
public class OttoBus extends BasicBus {

}
public class UpdateTitleEvent {

        public final String title;

        public UpdateTitleEvent(String title) {
                this.title = title;
        }

}
@EActivity(R.layout.hello_activity)
public class HelloAndroidActivity extends FragmentActivity {

        @Bean
        OttoBus bus;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                bus.register(this);
        }

        @Override
        protected void onDestroy() {
                super.onDestroy();
                bus.unregister(this);
        }

	@Subscribe
	public void onUpdateTitle(UpdateTitleEvent event) {
		setTitle(event.title);
	}

}
@EFragment(R.layout.hello_fragment)
public class HelloFragment extends Fragment {

	int counter = 1;

	@Bean
	OttoBus bus;

	@Click
	void fragmentButtonClicked() {
		bus.post(new UpdateTitleEvent("Clicks: " + counter++));
	}
}

The @Subscribe and @Produceannotations can be used in any enhanced component.