版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21482865/article/details/51578880
这几天做一个App用到了分享功能,最后用ShareActionProvider实现了,由于是在appcompat-v7使用ShareActionProvider,实现过程中遇到了几个坑,在此记录一下,方便以后查看。
1、首先在菜单xml文件中添加
ShareActionProvider的item:
<item
android
:id=
"@+id/menu_item_share"
app
:showAsAction=
"ifRoom"
android
:title=
"Share"
app
:actionProviderClass=
"android.support.v7.widget.ShareActionProvider"
/>
2、在Activity中定义
ShareActionProvider:
private
ShareActionProvider
mShareActionProvider
;
注意到导入的包是:
import
android.support.v7.widget.ShareActionProvider, 与xml文件中保持一致。
3、在onCreateOptionsMenu()中获取
ShareActionProvider,并设置Intent:
@Override
public boolean
onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.
menu
, menu);
// Locate MenuItem with ShareActionProvider
MenuItem item = menu.findItem(R.id.
menu_item_share
);
// Fetch and store ShareActionProvider
// mShareActionProvider = (ShareActionProvider) item.getActionProvider();
mShareActionProvider
=(ShareActionProvider)MenuItemCompat.
getActionProvider
(item);
Intent sendIntent =
new
Intent();
sendIntent.setAction(Intent.
ACTION_SEND
);
sendIntent.putExtra(Intent.
EXTRA_TEXT
,
news
.
link
);
sendIntent.setType(
"text/plain"
);
setShareIntent(sendIntent);
// Return true to display menu
return true
;
}
//Call to update the share intent
private void
setShareIntent(Intent shareIntent) {
if
(
mShareActionProvider
!=
null
) {
mShareActionProvider
.setShareIntent(shareIntent);
}
}
注意:在获取
ShareActionProvider时使用的是
MenuItemCompat.
getActionProvider
(item)方法,官网给出的方法是
item.getActionProvider(),
但在v7包中使用ShareActionProvider这种方法不可行,
StackOverflow上有人给出的方法使用
MenuItemCompat.
getActionProvider
(item),详情请参考:
http://stackoverflow.com/questions/27887716/exception-this-is-not-supported-use-menuitemcompat-getactionprovider
。
最后效果: