Action Items not showing in ActionBar with showAsAction="ifRoom"

android, android-actionbar

Solution

I found the problem. There was an error in the menu .xml file. In fact, I've added a new namespace:

`xmlns:app="http://schemas.android.com/apk/res-auto"`

But then, I still refer the property as if it belongs to the `android` namespace:

`android:showAsAction="ifRoom"`

The right way to refer this property is to use:

`app:showAsAction="ifRoom"`

Cause it belongs to the namespace `app`.

Here is the relevant part in documentation:

If your app is using the Support Library for compatibility on versions as low as Android 2.1, the showAsAction attribute is not available from the android: namespace. Instead this attribute is provided by the Support Library and you must define your own XML namespace and use that namespace as the attribute prefix. (A custom XML namespace should be based on your app name, but it can be any name you want and is only accessible within the scope of the file in which you declare it.)

Problem

I'm trying to add some Action Items to my Support Action Bar. In my activity, I have also tabs added to the Action Bar. This is an excerpt of the activity: ``` public class ShowEmails extends ActionBarActivity implements ShowEmailsFragmentInteractionListener { private IMAPClientService service; private boolean bound; private ActionBar ab; private MailDBHelper mdbhelper; private SQLiteDatabase db; private Intent client_service; <.........................> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.client_service = new Intent(this, IMAPClientService.class); this.mdbhelper = new MailDBHelper(this.getApplicationContext(), MailDBHelper.MAIL_DB_NAME, null, MailDBHelper.MAIL_DB_VERSION); this.db = this.mdbhelper.openWriteable(); this.ab = this.getSupportActionBar(); this.ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); this.ab.show(); Tab t = ab.newTab().setText(R.string.all_emails) .setTabListener(new TabListener<ShowEmailsFragment>(this, "all", ShowEmailsFragment.class)); ab.addTab(t); new LoadTabsInBackground().execute(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.show_emails_bulk_action, menu); return super.onCreateOptionsMenu(menu); } } ``` The class `LoadTabsInBackground` adds some tabs to the ActionBar after doing some database operation. This is the menu resource I'm inflating: ``` <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/email_refresh" android:orderInCategory="1" android:showAsAction="ifRoom" android:title="@string/action_refresh" android:icon="@drawable/ic_menu_refresh"/> <item android:id="@+id/email_bulk_seen" android:orderInCategory="20" android:showAsAction="ifRoom" android:title="@string/action_seen" android:icon="@android:drawable/sym_action_email"/> <item android:id="@+id/email_bulk_delete" android:orderInCategory="40" android:showAsAction="ifRoom" android:title="@string/action_delete" android:icon="@android:drawable/ic_menu_delete"/> </menu> ``` And here is an excerpt from AndroidManifest.xml, where you can sse the theme I'm using is `Theme.AppCompat.Light`: ``` <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="it.dndonline.battleclient4android" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.AppCompat.Light" > <.......................> <activity android:name="it.dndonline.battleclient4android.Activities.ShowEmails" android:label="@string/title_activity_show_folders" android:theme="@style/Theme.AppCompat.Light" > </activity> <......................................> </application> </manifest> ``` Everything seems correct to me, unfortunately, although tabs are loaded correctly, this means that ActionBar is properly working, none of the menu items are loaded in the action bar. Setting the `showAsAction` value to `always` doesn't change anything. I'm testing it on Android 2.3.3.

Original source

Related problems