ShareActionProvider无法点击,而且不能正常呈现在第一呈现(ShareActionP

2019-07-31 03:25发布

我有一个ShareActionProvider连同我的动作条一些其他的选择。 然而,它似乎ShareActionProvider具有正常显示,当在纵向模式下第一渲染问题,因此无法点击第一个渲染。 一种姿态变化重新呈现在屏幕上,然后一切都应该是可见的选项是可见的,旋转的回动作条时再重新呈现,但这次是在肖像模式下正确渲染为好。

我已经把它贴描述的情况的图像:

  1. 该分享选项不正确地呈现,它应该有它旁边的图标,如果它不适合布局,它应该成为一个3个点的菜单。

  2. 取向后如预期所有选项都可见。

  3. 旋转回纵向重新呈现的动作条,现在3个点的菜单出现,因为它应该,这是点击。

什么任何想法是怎么回事吗?

这是我的XML:

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/item_delete"
        android:icon="@android:drawable/ic_menu_delete"
        android:showAsAction="ifRoom|withText"
        android:title="Delete"
        android:visible="false"/>
    <item
        android:id="@+id/item_edit"
        android:icon="@android:drawable/ic_menu_edit"
        android:showAsAction="ifRoom|withText"
        android:title="Edit"
        android:visible="false"/>
    <item
        android:id="@+id/item_share"
        android:actionProviderClass="android.widget.ShareActionProvider"
        android:showAsAction="ifRoom|withText"
        android:title="Share"
        android:visible="false"/>
    <item
        android:id="@+id/item_save"
        android:icon="@android:drawable/ic_menu_save"
        android:showAsAction="ifRoom|withText"
        android:title="Save"
        android:visible="false"/>
    <item
        android:id="@+id/menu_search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@android:drawable/ic_menu_search"
        android:showAsAction="ifRoom"
        android:title="@string/menu_search"
        android:visible="false"/>

</menu>

这就是我如何处理的选项菜单中的片段:

 /**
 * Hook into the OptionsMenu and add an Edit, Delete and Share option.
 */
@Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem deleteItem = menu.findItem(R.id.item_delete);
    deleteItem.setVisible(true);

    MenuItem editItem = menu.findItem(R.id.item_edit);
    editItem.setVisible(true);

    MenuItem shareItem = menu.findItem(R.id.item_share);
    shareItem.setVisible(true);
    shareActionProvider = (ShareActionProvider) shareItem.getActionProvider();
    shareActionProvider.setShareIntent(getShareIntent());

    super.onPrepareOptionsMenu(menu);
}

/**
 * Builds an intent that takes the path for the image and passes it to 
 * the sharing mechanism as a stream built on the URI of the image path.
 * @return the intent to share the image as a stream
 */
private Intent getShareIntent()
{
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + receipt.getPhoto()));
    shareIntent.setType("image/jpeg");
    return shareIntent;
}

Answer 1:

那是因为你有意向加入到ShareActionPRovider你膨胀的菜单之后,在onCreateOptionsMenu

如果你这样做,只有在onPrepareOptionsMenu ,你必须手动调用invalidateOptionsMenu()来触发动作条更新(如所选择的答案告诉你)。 但是,这不是做的方式。

它正常工作时的配置更改,因为onPrepareOptionsMenu()被调用,然后你的分享按钮将工作,因为它现在有一个意图。

为了解决这个问题,就做这样的事情:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getSupportMenuInflater().inflate(R.menu.YOUR_MENU_XML, menu);

    ShareActionProvider provider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();

    if (provider != null) {
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_TEXT, YOUR_TEXT);
        shareIntent.setType("text/plain");
        provider.setShareIntent(shareIntent);
    }

    return true;
}

这样, ShareActionProvider将有Intent从一开始,并预期会工作。



Answer 2:

这样看来,叫“getActivity()。invalidateOptionsMenu()”onCreateView在片段使菜单重新渲染,因为它应该。 它应该在第一次运行正常显示,虽然未做改动并不觉得自己像一个妥善的解决办法无效的菜单。



Answer 3:

它像接缝平台的bug。 你可以检查此http://code.google.com/p/android/issues/detail?id=25467以获取更多信息。



Answer 4:

我不认为这是一个错误。 这是因为你的头衔改变。 这是短(“详细信息”,而不是“ReceiptDetail”)原本,因此系统必须有想有更多的空间来显示更多的行动项目。

另外,ShareActionProvider的宽度是动态的(它可以达到正常宽度的2倍以上)。

为了测试一个或两个的事情,我建议你移动共享动作项到第一个位置,删除临时解决办法,看看是否仍然出现了。 你也可以删除共享行动项目,并使用3个或更多的常规行动项目作为一个试验。



文章来源: ShareActionProvider not clickable and not rendering properly on first render