《Training:Adding an Easy Share Action》

本文介绍了如何在Android应用中使用ShareActionProvider简化分享操作。从API Level 14开始,开发者可以通过设置菜单项的actionProviderClass属性启用ShareActionProvider,并通过提供共享意图来配置其行为。

注:本人非专业翻译人员,编写此博客只是为了自学使用,如有疑问,请参考官方文档。



在Android 4.0(API第14级)中引入的ActionProvider,使在ActionBar中实现有效和用户友好的共享操作变得更加容易。 ActionProvider一旦附加到操作栏中的菜单项,就处理该项目的外观和行为。 (但是)在ShareActionProvider的情况下,您提供一个共享意图,其就处理剩下的。


注意:从API Level 14及更高版本开始可以使用ShareActionProvider。



一、更新菜单声明

要开始使用ShareActionProviders,请在菜单资源文件中定义相应的<item>的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运行,您必须提供一个共享意图。 此共享意图应与“发送简单数据到其他应用程序”课程中描述的相同,其中包含动作ACTION_SEND和通过EXTRA_TEXT和EXTRA_STREAM等附加设置的附加数据。 要分配一个共享意图,首先找到相应的MenuItem,同时增加你的Activity或Fragment中的菜单资源。 接下来,调用MenuItem.getActionProvider()来检索ShareActionProvider的一个实例。 使用setShareIntent()更新与该操作项相关联的共享意图。 以下是一个例子:

private ShareActionProvider mShareActionProvider;
...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate menu resource file.
    getMenuInflater().inflate(R.menu.share_menu, menu);

    // Locate MenuItem with ShareActionProvider
    MenuItem item = menu.findItem(R.id.menu_item_share);

    // Fetch and store ShareActionProvider
    mShareActionProvider = (ShareActionProvider) item.getActionProvider();

    // Return true to display menu
    return true;
}

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

您可能只需要在创建菜单时设置一次分享意图,或者您可能需要设置它,然后在UI更改时进行更新。 例如,当您在“图库”应用程序中全屏查看照片时,分享意图将在照片之间切换。
在使用 Git 管理项目时,有时会遇到警告信息 `warning: adding embedded git repository`,这通常发生在尝试将一个已包含 `.git` 子目录的项目作为子模块(submodule)或普通文件夹添加到另一个 Git 仓库中。以下是对这一问题的解析及解决方案。 ### 警告信息的原因 当 Git 检测到某个即将被添加的目录中包含 `.git` 子目录时,就会触发该警告。Git 认为这是嵌入式仓库的标志,并提示用户注意潜在的问题[^1]。这种情况可能出现在以下场景: - 将一个完整的 Git 仓库直接复制到当前项目的某个子目录中。 - 使用了错误的方式将子模块添加到了主仓库中。 - 第三方库本身自带 `.git` 文件夹。 Git 建议使用 `git submodule add` 命令来正确管理子模块,而不是直接将 `.git` 目录嵌套其中。 ### 解决方案 #### 方法一:删除嵌套 `.git` 目录 如果目标目录原本是一个独立的 Git 仓库,但你并不需要将其作为子模块保留版本控制信息,可以简单地删除其内部的 `.git` 文件夹: ```bash rm -rf VIU2X0/.git ``` 之后再执行 `git add VIU2X0` 即可正常添加该目录内容到当前仓库中。 #### 方法二:使用 `git submodule add` 添加子模块 如果你希望以子模块形式引用外部仓库,则应使用如下命令: ```bash git submodule add <repository-url> VIU2X0 ``` 例如: ```bash git submodule add https://github.com/example/VIU2X0.git VIU2X0 ``` 这样 Git 会自动创建正确的子模块结构,并避免嵌套 `.git` 的问题[^2]。 #### 方法三:使用 `.gitignore` 忽略嵌套 `.git` 目录 如果你已经误操作添加了带有 `.git` 的目录,可以通过以下方式修复并忽略 `.git`: 1. 删除缓存中的目录: ```bash git rm -r --cached VIU2X0 ``` 2. 在 `.gitignore` 文件中添加规则以忽略嵌套的 `.git`: ``` VIU2X0/.git ``` 3. 重新添加并提交: ```bash git add VIU2X0 git commit -m "Add VIU2X0 and ignore its .git directory" ``` 此方法适用于不希望将子仓库版本信息带入主仓库的情况[^2]。 ### 总结 Git 提出 `warning: adding embedded git repository` 是为了避免出现嵌套仓库导致的混乱和不可控的状态。根据实际需求选择合适的处理方式: - 如果不需要子仓库的历史记录,删除 `.git` 目录即可。 - 如果需要保留子仓库的版本历史,建议使用 `git submodule add` 来正确引入。 - 如果已经误操作,可通过清除缓存并配合 `.gitignore` 进行修正。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值