Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ActionBar上的MenuItem可以';不要点击_Android_Android Actionbar_Share_Menuitem_Shareactionprovider - Fatal编程技术网

Android ActionBar上的MenuItem可以';不要点击

Android ActionBar上的MenuItem可以';不要点击,android,android-actionbar,share,menuitem,shareactionprovider,Android,Android Actionbar,Share,Menuitem,Shareactionprovider,我正在尝试实现共享图像的共享意图。我有一个全屏活动,它扩展了ActionBarActivity,还有一个片段实现了《android开发者指南》中所解释的沉浸式模式,因此用户可以在全屏上看到图像。问题是,即使我能在ActionBar上看到share图标,它似乎也不能被点击,显然是因为从来没有调用OnOptions ItemSelected方法 这是OnCreateOptions菜单: onOptionsItemSelected: 以下是我创建的用于准备和启动意图的方法: 菜单共享.xml: 我

我正在尝试实现共享图像的共享意图。我有一个全屏活动,它扩展了ActionBarActivity,还有一个片段实现了《android开发者指南》中所解释的沉浸式模式,因此用户可以在全屏上看到图像。问题是,即使我能在ActionBar上看到share图标,它似乎也不能被点击,显然是因为从来没有调用OnOptions ItemSelected方法

这是OnCreateOptions菜单:

onOptionsItemSelected:

以下是我创建的用于准备和启动意图的方法:

菜单共享.xml:


我尝试了不同的方法,例如使用<代码> StEnMeNuTeMeCurkListList< /Cord>或类似的考虑侦听器的事物,但我发现这些侦听器在调试时被忽略。我也在这里和其他网站上搜索了一个解决方案,但我不知道如何解决这个问题,所以任何想法都将受到欢迎。


提前谢谢

您正在为错误的菜单充气。由于菜单文件名为
menu.xml
,因此您应该执行以下操作:

getMenuInflater().inflate(R.menu.menu, menu); 
您不直接为条目充气,而是打开菜单

也在你的下面

switch (item.getItemId()) {
    case R.id.menu_share:

写入:
Log.d(“mytag”,“单击共享菜单”)
然后你可以在你的android logcat中验证菜单点击没有问题,但是你收到的是你的意图。

最终,我改变了解决问题的方法,现在我可以调用
onOptions ItemSelected(MenuItem)
方法并将我的应用程序中的图像共享给其他人。我把代码放在下面

onCreateOptions菜单(菜单菜单):

onOptionsItemSelected(菜单项):

单击右侧菜单项时创建共享意图的方法:

项目的id位于values文件夹中的ids.xml

<?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item type="id" name="action_share"/>
    </resources>

strings.xml:


共享图像

如您所见,我不再使用
getMenuInflater().inflate(int menuRes,Menu Menu)
,但我使用
add()
方法生成菜单,它对我有效。

对不起,我的错,我编写了Menu.xml而不是Menu\u share.xml,这是我菜单文件的真实名称。现在我编辑这个问题,谢谢!!您不必注册任何侦听器。我怀疑您的uriString返回null。在案例R.id.menu_share之后:编写一个Toast.makeText(这个“share menu clicked”,Toast.LENGTH_LONG.show();不,uriString返回正确的字符串,我在尝试另一个解决方案时已经检查过了,Intent I=getIntent()和uriString=I.getStringExtra(“uri”);在onCreateOptions菜单(菜单菜单)方法中。事实上,OnOptions ItemSelected(MenuItem MenuItem)从未被调用……如果我在这个方法中放置了断点,当我单击共享图标时,调试器没有看到它,并且什么也没有发生。不,当我单击共享图标时,消息不会弹出。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/menu_share"
        android:title="Share"
        app:showAsAction="ifRoom"
        android:icon="@drawable/abc_ic_menu_share_mtrl_alpha"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
        />
</menu>
getMenuInflater().inflate(R.menu.menu, menu); 
switch (item.getItemId()) {
    case R.id.menu_share:
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menuItem = menu.add(Menu.NONE, R.id.action_share, Menu.NONE, R.string.action_share);
    menuItem.setIcon(R.drawable.abc_ic_menu_share_mtrl_alpha);
    menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    mShareActionProvider = new ShareActionProvider(this);
    return true;
}
@Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {

            case R.id.action_share:
                Intent i = getIntent();
                uriString = i.getStringExtra("uri");

                if (uriString != null) {
                    Uri uri = Uri.parse(uriString);

                    MenuItemCompat.setActionProvider(item, mShareActionProvider);
                    createShareIntent(uri);
                    return true;
                }
            default:
                return super.onOptionsItemSelected(item);
        }
    }
private void createShareIntent(Uri uri) {
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    shareIntent.setType("image/*");
    if (mShareActionProvider != null) {
        mShareActionProvider.setShareIntent(shareIntent);
    }

}
<?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item type="id" name="action_share"/>
    </resources>
<!-- Actions -->
    <string name="action_share">Share image</string>