How to get the action type of a menu item?

This is my code.

home.xml

<item android:id="@+id/action_shopping_cart" android:actionLayout="@layout/action_bar_cart_button" android:showAsAction="ifRoom" android:title="Shopping Cart" /> <item android:id="@+id/action_notifications" android:actionLayout="@layout/action_bar_notifications_button" android:showAsAction="ifRoom" android:title="Notifications" /> <item android:id="@+id/menu_overflow" android:orderInCategory="100" android:icon="@drawable/ic_action_overflow" android:showAsAction="always" android:title="OverFlow"> <menu> <item android:id="@+id/action_my_account" android:orderInCategory="100" android:showAsAction="never" android:title="My Account" /> <item android:id="@+id/action_current_orders" android:orderInCategory="100" android:showAsAction="never" android:title="My Orders" /> <item android:id="@+id/action_wish_list" android:orderInCategory="100" android:showAsAction="never" android:title="My Wishlist" /> <item android:id="@+id/action_contact_us" android:orderInCategory="100" android:showAsAction="never" android:title="Contact Us" /> <item android:id="@+id/action_logout" android:orderInCategory="100" android:showAsAction="never" android:title="Logout" /> </menu> </item> 

I want the View "menu_overflow" , how can I get this?

I tried the following way:

Activity.java code

public boolean onCreateOptionsMenu (menu menu) {

  final MenuItem item = menu.findItem(R.id.menu_overflow); View view = (View) findViewById(R.id.menu_overflow); new MaterialShowcaseView.Builder(this) .setTarget(mOverFlowIcon) .setRadius(10) .setMaskColour(Color.argb(150, 0, 0, 0)) .setContentText("Find Your Wishlist Here") // optional but starting animations immediately in onCreate can make them choppy .setDismissOnTouch(true) .show(); return super.onCreateOptionsMenu(menu); } 

But the view is null .

Please help ... thanx

+7
android android-actionbar menuitem
source share
4 answers

Are you inflating a menu in onCreateOptionsMenu? It seems that when onCreateOptionsMenu is executed, xml inflation is added to the event queue, and not inflated immediately. This causes a null pointer when findViewById () is executed. Try putting your view in a handler. The code in the handler is added to the message queue and therefore will be executed after the menu is inflated. This will solve your null pointer. It will look something like this:

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); new Handler().post(new Runnable() { @Override public void run() { View view = (View) findViewById(R.id.menu_overflow); new MaterialShowcaseView.Builder(this) .setTarget(view) .setRadius(10) .setMaskColour(Color.argb(150, 0, 0, 0)) .setContentText("Find Your Wishlist Here") // optional but starting animations immediately in onCreate can make them choppy .setDismissOnTouch(true) .show(); } }); return true; } 
+8
source share

You can get a link to MenuItem by overriding the onPrepareOptionsMenu(Menu) method:

 @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem actionViewItem = menu.findItem(R.id.your_menu_item); return super.onPrepareOptionsMenu(menu); } 

If you want a link to an ActionView , you can do this using the MenuItemCompat.getActionView(MenuItem) method:

 @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem actionViewItem = menu.findItem(R.id.your_menu_item); View v = MenuItemCompat.getActionView(actionViewItem); return super.onPrepareOptionsMenu(menu); } 
+2
source share

Try:

 <item android:id="@+id/menu_overflow" android:orderInCategory="100" android:icon="@drawable/ic_action_overflow" android:title="OverFlow" app:showAsAction="always" app:actionViewClass="android.widget.ImageButton"> 

Pay attention to the following lines:

  app:showAsAction="always" app:actionViewClass="android.widget.ImageButton" 
+1
source share

Have you tried this?

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. switch (item.getItemId()){ case R.id.action_shopping_cart: Toast.makeText(this, "action_shopping_cart", Toast.LENGTH_SHORT).show(); break; case R.id.action_notifications: Toast.makeText(this, "action_notifications", Toast.LENGTH_SHORT).show(); break; case R.id.menu_overflow: Toast.makeText(this, "menu_overflow", Toast.LENGTH_SHORT).show(); break; case R.id.action_my_account: Toast.makeText(this, "action_my_account", Toast.LENGTH_SHORT).show(); break; case R.id.action_current_orders: Toast.makeText(this, "action_current_orders", Toast.LENGTH_SHORT).show(); break; case R.id.action_wish_list: Toast.makeText(this, "action_wish_list", Toast.LENGTH_SHORT).show(); break; case R.id.action_contact_us: Toast.makeText(this, "action_contact_us", Toast.LENGTH_SHORT).show(); break; case R.id.action_logout: Toast.makeText(this, "action_logout", Toast.LENGTH_SHORT).show(); break; } return super.onOptionsItemSelected(item); } 

Take care of your xml name (i.e. home.xml)

0
source share

All Articles