禁用ActionBar中的ShareActionProvider

3

我想禁用在ActionBar的Action Mode中显示的ShareActionProvider。但是

menu.findItem(R.id.myShareItem).setEnabled(false)  

它不能被禁用吗?还是我漏掉了什么?

更新:

在Jelly Bean上测试,这个独立的Activity类展示了这个问题:

package com.example;

import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.MimeTypeMap;
import android.widget.ShareActionProvider;
import android.widget.Toast;

public class MyActivity extends Activity {

    private MenuItem mShareItem;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        ShareActionProvider sap = new ShareActionProvider(this);

        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType(MimeTypeMap.getSingleton().getMimeTypeFromExtension("jpg"));
        sap.setShareIntent(shareIntent);


        mShareItem = menu.add("Share");
        mShareItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        mShareItem.setActionProvider(sap);

        MenuItem toggleItem = menu.add("Toggle");
        toggleItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        //---shouldn't this work ? -----
        mShareItem.setEnabled(!mShareItem.isEnabled());

        Toast.makeText(this,mShareItem + " enabled: " + mShareItem.isEnabled(),Toast.LENGTH_SHORT).show();

        return super.onOptionsItemSelected(item);
    }

}

哼... 我本来以为它会起作用的。有任何视觉效果吗?LogCat 中有任何记录吗?你尝试过使用原生操作栏吗(以防它是与 ABS 有关的错误)? - CommonsWare
没有日志,MenuItem 的启用状态已设置为 false,但我仍然可以单击它,目前我正在将其 ShareIntent 设置为 null 作为解决方法。这种情况发生在 ActionMode 中。 - S.D.
这很令人不安,在b.android.com上我没有看到关于它的错误报告。如果您可以编写一个演示此问题的示例项目,我可以进行一些实验(例如,在本地操作栏上测试它)。 - CommonsWare
刚在果冻豆上测试了一下,问题还存在。我会上传演示并告知您。谢谢。 - S.D.
1
你的代码中有一个错别字(你基于 item 是否启用来切换 mShareItem,而不是基于 mShareItem 本身是否启用)。话虽如此,即使修复了这个问题,我还是能够重现你的问题。目前,我认为这是一个 bug,并且我已经提交了报告:http://code.google.com/p/android/issues/detail?id=39290 - CommonsWare
显示剩余2条评论
2个回答

1
你可以尝试以下操作:
setShareIntent(new Intent());

这应该就可以了。

这在 onPrepareOptionsMenu(Menu) 中运行良好,不仅限于菜单第一次加载。Android 6.0.1。 - unrulygnu

1

这可能是一个错误,在此处报告

当前的解决方法:setShareIntent(null)


1
这个解决方法只在菜单第一次加载时有效。在后续的加载中,菜单仍然可以点击,列表中的项目也是可选的,但是当共享意图为空时,菜单中的项目不起作用。对于用户来说,这是一个相当糟糕的体验,因为他们会看到菜单,能够点击一个项目来关闭菜单,但此后什么都不会发生。 - Jason Polites

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接