ActionBar上的分享按钮出现两次

时间:2015-07-03 06:02:00

标签: android android-intent android-actionbar android-menu android-sharing

我已在操作栏上创建了一个分享按钮 - 但它似乎出现了两次。

enter image description here

菜单XML文件位于以下位置:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_share"
        android:title="@string/action_share"
        app:showAsAction="always"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"   
    />

</menu>

它在视图中的onCreateOptionsMenu中实例化。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_detail, menu);

    MenuItem menuItem = menu.findItem(R.id.action_share);

    mShareActionProvider =
            (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);

    if(mShareActionProvider != null && !mForecastString.isEmpty()){
        mShareActionProvider.setShareIntent(createShareForecastIntent());
    } else{
        Log.d(LOG_TAG, "Share Action provider is null?");
    }

    super.onCreateOptionsMenu(menu,inflater);
}

如果分享按钮被定义,膨胀和仅实例化一次,它怎么能出现两次呢?

3 个答案:

答案 0 :(得分:3)

在充气菜单选项之前,请使用menu.clear();

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     menu.clear();
    inflater.inflate(R.menu.menu_detail, menu);

    MenuItem menuItem = menu.findItem(R.id.action_share);

    mShareActionProvider =
            (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);

    if(mShareActionProvider != null && !mForecastString.isEmpty()){
        mShareActionProvider.setShareIntent(createShareForecastIntent());
    } else{
        Log.d(LOG_TAG, "Share Action provider is null?");
    }

    super.onCreateOptionsMenu(menu,inflater);
}

答案 1 :(得分:3)

您在“活动”和“片段”中两次对菜单进行充气。

消除一次通胀应解决问题。

答案 2 :(得分:0)

由于菜单重复性膨胀,这种情况正在发生。  在通货膨胀之前使用menu.clear()。

    @Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     menu.clear();
    inflater.inflate(R.menu.my_menu_layout, menu);
 }