好的,这是一个非常具体的问题:我的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);
}
}
以下是一些图片: 首先创建共享列表
点击全部时
滚动列表时
希望问题很清楚。另请注意,无法单击图标,这样做就像在列表外单击一样并将其杀死。
答案 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