Search code examples
javaandroidandroid-actionbarshareactionprovider

ShareActionProvider is automatically opened when returned to it's activity


I've used a pretty standard implementation of the ShareActionProvider in my actionbar and it works fine. However, when I start another activity from an actionbutton in the actionbar and return from that activity the dropdownmenu of the SharedActionProvider is automatically opened.

This behavior doesn't occur when I execute the exact same code to open another activity from a normal button.

Here is my menu xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_btn_my_scedule" 
    android:icon="@drawable/ic_menu_my_calendar"
    android:title="To Scedule"
    android:showAsAction="ifRoom" />
<item android:id="@+id/menu_btn_share" 
    android:title="Share.."
    android:showAsAction="ifRoom"
    android:actionProviderClass="android.widget.ShareActionProvider" />    
<item android:id="@+id/menu_btn_set_scedule"
    android:icon="@drawable/ic_menu_today"
    android:title="Set Scedule"
    android:showAsAction="collapseActionView"
    android:actionProviderClass="android.widget.ShareActionProvider" />
<item android:id="@+id/menu_btn_settings"
    android:icon="@drawable/ic_menu_manage"
    android:title="Settings"
    android:showAsAction="collapseActionView"
    android:actionProviderClass="android.widget.ShareActionProvider" />
<item android:id="@+id/menu_btn_feedback"
    android:icon="@drawable/ic_menu_manage"
    android:title="Feedback/Question"
    android:showAsAction="collapseActionView"
    android:actionProviderClass="android.widget.ShareActionProvider" />
<item android:id="@+id/menu_btn_about"
    android:icon="@drawable/ic_menu_info_details"
    android:title="About"
    android:showAsAction="collapseActionView"
    android:actionProviderClass="android.widget.ShareActionProvider" />
</menu>

The other menu methods:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.optionsmenu, menu);

    MenuItem actionItem = menu.findItem(R.id.menu_btn_share);
    ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider();
    actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
    actionProvider.setShareIntent(createShareIntent());

    return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return false;
        case R.id.menu_btn_my_scedule:
            Intent i = new Intent(ONTTOptions.this, ONTTShowScedule.class);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            startActivity(i);
            return true;
        case R.id.menu_btn_set_scedule:
            i = new Intent(ONTTOptions.this, ONTTScedule.class);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            startActivity(i);
            return true; 
        case R.id.menu_btn_settings: 
            i = new Intent(ONTTOptions.this, ONTTPreferences.class);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            startActivity(i);
            return true; 
        case R.id.menu_btn_feedback: 
            showFeedbackDialog();
            return true;
        case R.id.menu_btn_about:
            i = new Intent(ONTTOptions.this, ONTTAboutActivity.class);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            startActivity(i);
            return true;    
        default: return super.onOptionsItemSelected(item);
    }
}

private Intent createShareIntent() {
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_TEXT, "https://play.google.com/store/apps/details?id=" + ONTTConfig.PACKAGE_NAME);
    return shareIntent;
}

I must have missed something somewhere, thanks for any help.


Solution

  • I found the problem. I thought android:actionProviderClass="android.widget.ShareActionProvider" was also needed on every actionbar item I wanted in the overflow menu. I simply removed it on every item except the share button ofcourse.

    My menu xml now looks like this:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/menu_btn_my_scedule" 
        android:icon="@drawable/ic_menu_my_calendar"
        android:title="To Scedule"
        android:showAsAction="ifRoom" />
    <item android:id="@+id/menu_btn_share" 
        android:title="Share.."
        android:showAsAction="ifRoom"
        android:actionProviderClass="android.widget.ShareActionProvider" />    
    <item android:id="@+id/menu_btn_set_scedule"
        android:icon="@drawable/ic_menu_today"
        android:title="Set Scedule"
        android:showAsAction="collapseActionView" />
    <item android:id="@+id/menu_btn_settings"
        android:icon="@drawable/ic_menu_manage"
        android:title="Settings"
        android:showAsAction="collapseActionView" />
    <item android:id="@+id/menu_btn_feedback"
        android:icon="@drawable/ic_menu_manage"
        android:title="Feedback/Question"
        android:showAsAction="collapseActionView" />
    <item android:id="@+id/menu_btn_about"
        android:icon="@drawable/ic_menu_info_details"
        android:title="About"
        android:showAsAction="collapseActionView" />
    </menu>