Handling options menu

Kay-Uwe Janssen edited this page Oct 9, 2016 · 15 revisions

Since AndroidAnnotations 2.2

You can easily add options menu support in your activities, with the @OptionsMenu and @OptionsItem annotations.

  • @OptionsMenu lets you specify the menu resource to use
  • @OptionsItem marks methods that receives menu selection events

Both annotations can be used independently.

Here is a simple example on how to use them:

@EActivity
@OptionsMenu(R.menu.my_menu)
public class MyActivity extends Activity {

	@OptionsMenuItem
	MenuItem menuSearch;

	@OptionsItem(R.id.menuShare)
	void myMethod() {
	  // You can specify the ID in the annotation, or use the naming convention
	}

	@OptionsItem
	void homeSelected() {
	  // home was selected in the action bar
	  // The "Selected" keyword is optional
	}

	@OptionsItem
	boolean menuSearch() {
	  menuSearch.setVisible(false);
	  // menuSearch was selected
	  // the return type may be void or boolean (false to allow normal menu processing to proceed, true to consume it here)
	  return true;
	}

	@OptionsItem({ R.id.menu_search, R.id.menu_delete })
	void multipleMenuItems() {
	  // You can specify multiple menu item IDs in @OptionsItem
	}

	@OptionsItem
	void menu_add(MenuItem item) {
	  // You can add a MenuItem parameter to access it
	}
}

Injecting Menu items

Since AndroidAnnotations 3.0

@OptionsMenuItem can be used to inject a MenuItem in an attribute.

Be careful : Injected menu items can't be used in @AfterInject nor @AfterViews annotated methods, because of Android activity lifecycle. More information are available here.

Inject Menu

Since AndroidAnnotations 4.0.0

With @InjectMenu you can inject the Fragment's or the Activity's Menu object.

Be careful : The menu also can't be used in @AfterInject nor @AfterViews as @OptionsMenuItem.

One example for the use:

@EActivity
public class MyActivity extends Activity {

	@InjectMenu
	Menu menu;
	
}

Method based injection

Since AndroidAnnotations 4.0.0

@EActivity
public class MyActivity extends Activity {

  @InjectMenu
  void setMenu(Menu menu){
    // do something with menu
  }

}

Multiple Options Menu

Since AndroidAnnotations 2.7

You can combine multiple xml menus with @OptionsMenu:

@EActivity
@OptionsMenu({R.menu.my_menu1, R.menu.my_menu2})
public class MyActivity extends Activity {

}

Fragment support

Since AndroidAnnotations 2.7

You can also use @OptionsMenu and @OptionsItem in Fragments:

@EFragment
@OptionsMenu(R.menu.my_fragment_menu)
public class MyFragment extends Fragment {

	@OptionsItem
	void menuRefreshSelected() {
	}
	
}

14/10/2018 The 4.5.1 release is out !

Using AndroidAnnotations

Questions?

Enjoying AndroidAnnotations

Improving AndroidAnnotations

Extending AndroidAnnotations

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.