带有弹出菜单的Android ShareActionProvider - 不需要的重复列表

时间:2014-03-26 15:11:02

标签: android android-listview shareactionprovider

好的,这是一个非常具体的问题:我的ShareActionProvider正用于论坛中的帖子。它工作(除了讨厌的脸书,但我知道这是一个众所周知的问题)。但是,当我从弹出菜单中选择共享选项时,会绘制两个列表,一个列在另一个列表的顶部。

如何修复它,只显示一个列表?

编辑:SO上至少还有两个问题涉及这个问题:

I Use ShareActionProvider in PopupMenu, but show two PopupMenu?

Call ShareActionProvider from a PopupMenu

这是我的代码: xml中的菜单项

    <item
    android:id="@+id/menu_community_overflow_share"
    android:title="@string/menu_share"
    app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
    android:orderInCategory="1"
    app:showAsAction="never" />

爪哇

    private void share(MenuItem item) {
    mShareActionProvider = (ShareActionProvider)MenuItemCompat.getActionProvider(item);

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, "Here's a message originally posted by " + mClickedMessage.getFirstName()
            + " " + mClickedMessage.getLastName() + ": " + mClickedMessage.getTheMessage() + "\n\n");
    sendIntent.setType("text/plain");

    setShareIntent(sendIntent);
}

// Call to update the share intent
private void setShareIntent(Intent shareIntent) {
    if (mShareActionProvider != null) {
        mShareActionProvider.setShareIntent(shareIntent);
    }
}

以下是一些图片: 首先创建共享列表 Share list is first created

点击全部时

When See All is clicked

滚动列表时

When list is scrolled

希望问题很清楚。另请注意,无法单击图标,这样做就像在列表外单击一样并将其杀死。

2 个答案:

答案 0 :(得分:1)

这是我最终使用的代码(我甚至不确定我是怎么想的,因为很久以前),但它可能对某人有所帮助。

解决方案并不理想,它删除了重复列表,但留下了无聊的列表(没有图标),我有点想要另一个。如果我记得这种分享方式已经过时,如果有人能够更清楚地了解这个问题,这将是非常好的。

private void share(MenuItem item) {
        mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, "Here's a message originally posted by " + mClickedMessage.getFirstName()
                + " " + mClickedMessage.getLastName() + ": " + mClickedMessage.getTheMessage() + "\n\n Sent via Loylap");
        sendIntent.setType("text/plain");
        startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_post_to)));
    }

答案 1 :(得分:0)

所以我提出了自己的解决方案,它基本上用一个新的类取代了ShareActionProvider,该类使用相同的意图过滤器获得相同的Activites,称为ShareActionAdapter。相关摘录如下:

 Intent intent = new Intent(Intent.ACTION_SEND);
 intent.setType("text/plain");
 PackageManager pm = context.getPackageManager();
 m_list = new ArrayList<>(pm.queryIntentActivities(intent, PackageManager.GET_RESOLVED_FILTER));

可以找到模仿弹出体验的完整要点here