用ShareActionProvider添加一个简单的共享事件
在ActionBar中添加分享功能会使得应用更加高效友好。Android4.0(API等级14)引入的ActionProvider类使得分享功能变得更加的简单。一旦ActionProvider被绑定到Action Bar的一个菜单中,它就能处理那一项的显示和反应。在ShareActionProvider的实例中,只需提供分享的Intent,其他的会被ShareActionProvider自行处理。
**注意:**ShareActionProvider出现在API等级14或者更高版本的SDK中
更新菜单项
图1 Gallery应用中的ShareActionProvider
从ShareActionProvider开始。在menu resource 文件对应的中定义 android:actionProviderClass属性。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_item_share"
android:showAsAction="ifRoom"
android:title="Share"
android:actionProviderClass="android.widget.ShareActionProvider" />
...
</menu>
这就将菜单项的外观和功能委托给了ShareActionProvider,但是应该告知ShareActionProvider那些是要被分享的。
设置分享intent
为了使ShareActionProvider发挥功能,必须提供一个分享的Intent.这个Intent必须和在Sending Content to Other Apps中描述的Intent一致(使用ACTION SEND,通过EXTRA TEXT、EXTRA STREAM添加数据)。部署一个分享的Intent,首先填充菜单时,要在Activity或者Fragment中找到对应的菜单项,然后调用MenuItem.getActionProvider()获得ShareActionProvider的实例。使用setShareIntent()更新和活动项相关的分享Intent。示例如下:
private ShareActionProvider mShareActionProvider;
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//填充菜单
getMenuInflater().inflate(R.menu.share_menu, menu);
//定位使用ShareActionProvider的菜单项
MenuItem item = menu.findItem(R.id.menu_item_share);
// 获取和存储 ShareActionProvider
mShareActionProvider = (ShareActionProvider) item.getActionProvider();
//返回true,显示菜单
return true;
}
// 更新 分享Intent
private void setShareIntent(Intent shareIntent) {
if (mShareActionProvider != null) {
mShareActionProvider.setShareIntent(shareIntent);
}
}
也许只要当创建菜单是需要设置分享Intent,或者当UI发生变化时设置并更新分享Intent。比如在Gallery应用中全屏观看图片,当在图片之间点击是,分享Intent就会发生变化。
关于ShareActionProvider的进一步讨论,查看Action Bar。