添加分享按钮点击后如何显示下拉分享菜单?

添加分享按钮后,点击如何弹出下拉菜单显示可以分享的应用。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //return super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.menu, menu);
        MenuItem item = menu.findItem(R.id.menu_item_share);
        shareActionProvider = (android.support.v7.widget.ShareActionProvider) MenuItemCompat.getActionProvider(item);
        return true;
    }

private void setshareIntent(Intent shareIntent){
        if (shareActionProvider!=null){
            shareActionProvider.setShareIntent(shareIntent);
        }
    }

private Intent createIntent(){
        Intent shareIntent = new Intent();
        shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_TEXT,"hello");
        return shareIntent;
    }
    
     @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //return super.onOptionsItemSelected(item);
        switch (item.getItemId()){
            case R.id.refresh:
                updateWeather();
                break;
            case R.id.setting:
                Intent intent = new Intent(MyApplication.getContext(),SettingsActivity.class);
                startActivity(intent);
                break;

            case R.id.menu_item_share:
                setshareIntent(createIntent());
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }

MainActicty继承AppCompatActivity
menu.xml文件

<?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">
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    <group android:id="@+id/hide_shoose">
        <item android:id="@+id/refresh"
            android:orderInCategory="100"
            android:title="刷新" />
        <item android:id="@+id/setting"
            android:orderInCategory="100"
            android:title="设置"/>
        <item android:id="@+id/setlocation"
            android:orderInCategory="100"
            android:title="位置"/>
    </group>

    <item
        android:id="@+id/menu_item_share"
        app:showAsAction="ifRoom"
        android:title="share"
        android:icon="@drawable/chrome48"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
</menu>

然后通过intent来实现应用的过滤。现在的问题是无法点击以及弹出下拉菜单;
图片描述
我是学着http://hukai.me/android-training-course-in-chinese/basics/actionbar/adding-buttons.html的serach Button这部分写的,之前题述不对对不起帮助的各位。

阅读 6.8k
3 个回答

既然 getActionProvider 为 null,那就新建一个:

private ShareActionProvider mShareActionProvider;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options_menu, menu);

    MenuItem item = menu.findItem(R.id.menu_item_share);
    // mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
    
    mShareActionProvider = new ShareActionProvider(MainActivity.this);
    mShareActionProvider.setShareIntent(createIntent());
    MenuItemCompat.setActionProvider(item, mShareActionProvider);

    return true;
}

另外:更新评论中的说法,调试后发现,你的问题并不需要实现 menu item 对应的监听器方法:case R.id.menu_item_share:
也就是,这个分支的内容是可以删掉的。

关键部分代码没贴完整,把 creatOptionsMenu 方法下的代码都贴上来看一下。另外,creatIntent 方法 return前加上 Intent.createChooser(shareIntent, "Share");

感觉像官方support_v4_demos里的"App/ShareCompat Demo",可以参考一下,效果就是右上角一个图标,图标会带下标,点击后弹出下拉式Spinner一样的列表

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题