1

我在我的操作栏中使用了一个非常标准的 ShareActionProvider 实现,它工作正常。但是,当我从操作栏中的操作按钮启动另一个活动并从该活动返回时,SharedActionProvider 的下拉菜单会自动打开。

当我执行完全相同的代码从普通按钮打开另一个活动时,不会发生这种行为。

这是我的菜单 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>

其他菜单方法:

@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;
}

我一定在某个地方遗漏了什么,感谢您的帮助。

4

1 回答 1

0

我发现了问题。我认为在溢出菜单中我想要的每个操作栏项目也需要 android:actionProviderClass="android.widget.ShareActionProvider" 。我只是在除共享按钮之外的所有项目上删除了它。

我的菜单 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" />
<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>
于 2012-06-18T08:59:12.087 回答