gpt4 book ai didi

android - ShareActionProvider 不可点击且在首次渲染时无法正确渲染

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:19 26 4
gpt4 key购买 nike

我的 ActionBar 中有一个 ShareActionProvider 和一些其他选项。然而,ShareActionProvider 似乎在首次以纵向模式呈现时无法正确呈现,并且在第一次呈现时不可点击。方向更改会重新呈现屏幕,然后所有应该可见的选项都可见,当向后旋转时,ActionBar 会再次重新呈现,但这次它也在纵向模式下正确呈现。

我附上了描述情况的图片:

  1. “共享”选项未正确呈现,它旁边应该有一个图标,如果它不适合布局,它应该变成一个三点菜单。

  2. 定向后所有选项都按预期可见。

  3. 旋转回纵向会重新呈现 ActionBar,现在三点菜单会正常显示并且可以点击。

对这里发生的事情有什么想法吗?

ActionBar description

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

这就是我在 Fragment 中处理选项菜单的方式:

 /**
* 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;
}

最佳答案

那是因为您必须在展开菜单后立即在 onCreateOptionsMenu 上向 ShareActionPROvider 添加一个 Intent 。

如果您只在 onPrepareOptionsMenu 中执行此操作,则您必须手动调用 invalidateOptionsMenu() 来触发 ActionBar 更新(正如所选答案告诉您的那样)。但这不是这样做的方法。

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

要解决这个问题,只需执行以下操作:

@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,并按预期工作。

关于android - ShareActionProvider 不可点击且在首次渲染时无法正确渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12087164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com