【问题标题】:Share Button on ActionBar Appears TwiceActionBar 上的分享按钮出现两次
【发布时间】:2015-07-03 06:02:00
【问题描述】:

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

菜单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);
}

如果只定义、膨胀和实例化一次共享按钮,它怎么会出现两次?

【问题讨论】:

  • 真的很奇怪。从未见过。
  • 您可能在活动基类及其扩展,或活动和片段中使用了相同的onCreateOptionsMenu
  • 是的 - 这正是问题所在!
  • 我猜,您将 Menu 膨胀了两次。第一个来自活动,第二个来自片段。 - 你需要从任何一个地方删除。

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


【解决方案1】:

您在 Activity 和 Fragment 中两次膨胀 Menu。

消除一次通货膨胀应该可以解决问题。

【讨论】:

  • 我同意这一点。
【解决方案2】:

在膨胀菜单选项之前使用 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);
}

【讨论】:

    【解决方案3】:

    这是由于菜单的重复膨胀而发生的。 在通货膨胀之前使用 menu.clear()。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 2012-07-10
      相关资源
      最近更新 更多