如何从 Android 中的菜单项调用 Activity?

2024-01-31

我试图通过单击菜单按钮来调用 startActivity(myIntent) 但我的应用程序此时崩溃了。

通过常规按钮单击,相同的 startActivity 调用可以正常工作,因此,我认为菜单按钮缺少有关上下文的信息?或者也许我在这里完全偏离了目标。

那么...让菜单项将我带到特定活动的正确方法是什么?

我根据最初的建议修改了我的代码。仍然在同一个地方崩溃。调试器不会进入异常子句,应用程序就会死掉。

[使用代码片段编辑]

public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.menu, menu);
  return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
   try{
    switch (item.getItemId()) {
    case R.id.menuItemLang:            
        startActivity(new Intent("com.my.project.SETTINGS"));
        return true;        
    default:
        return super.onOptionsItemSelected(item);
    }
   }catch(Exception e){
      log(e);
   }
}

第一个选项

你必须覆盖onOptionsItemSelected活动中的方法,当用户单击“选项”菜单中的项目时调用该方法。在该方法中,您可以检查单击了哪些项目。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case R.id.menu_item1:
        Intent intent = new Intent(this, ActivityForItemOne.class);
        this.startActivity(intent);
        break;
    case R.id.menu_item2:
        // another startActivity, this is for item with id "menu_item2"
        break;
    default:
        return super.onOptionsItemSelected(item);
    }

    return true;
}

还有onContextItemSelected方法的工作原理类似,但对于上下文菜单(我不确定,你的意思是什么菜单)。

更多信息请访问http://developer.android.com/guide/topics/ui/menus.html http://developer.android.com/guide/topics/ui/menus.html

EDIT:

第二个选项

我认为第一个选项更容易,但是从您的代码中我看到,您希望将活动作为一个操作来启动(因为String参数输入Intent构造函数)。为此,您需要在 AndroidManifest.xml 中指定一个操作。所以,如果我开始活动ActivityForItemOne(来自前面的示例)<application>AndroidManifest.xml 中的元素如下所示:

<application ...>
    ...

    <activity android:label="Activity For First Item" android:name=".ActivityForItemOne">
        <intent-filter>
            <action android:name="my.app.ITEMONE" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

And the Intent将:

Intent intent = new Intent("my.app.ITEMONE");

The my.app.是您的应用程序的包。不一定要使用您的应用程序包,但为了操作的唯一性,建议您使用它。

更多信息请访问:

类意图 - 操作和类别常量 http://developer.android.com/reference/android/content/Intent.html

动作元素 http://developer.android.com/guide/topics/manifest/action-element.html

意图和意图过滤器 http://developer.android.com/guide/topics/intents/intents-filters.html

希望这能解决您的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Android 中的菜单项调用 Activity? 的相关文章

随机推荐

  • Python 使用新的相机位置创建图像

    我现在正在努力完成一项特定的计算机视觉任务 例如 假设我们有一个道路的相机框架 现在我想用水平平移的假想相机生成一个新帧 此外 还添加了一个微小的摄像角度 为了说明这一点 我上传了一张演示图片 如何在 python 中从原始框架创建新框架
  • Oracle SQL:收到“没有匹配的唯一键或主键”错误,但不知道原因

    我在尝试创建表时收到此错误 但我不知道为什么 2016 07 05 14 08 02 42000 2270 ORA 02270 no matching unique or primary key for this column list 这
  • 为 Windows 中的目录生成校验和

    我想为目录创建校验和 我正在遵循对此给出的答案post https stackoverflow com questions 17228202 generate md5 keys and save in a text file 但问题是它正在
  • Java 中带有过期时间的对象池的第三方库

    我在 Web 服务服务器上 并且有具有内部连接的对象 初始化此连接需要很长时间 因此我的想法是使用对象池来重用不同请求之间的连接 这些对象连接到每个用户 因此我更喜欢使用用户名作为键 使用连接作为值 但我不想让连接永远打开 也许一段时间后
  • 接口,无法在Unity配置上构建

    我在这个项目上使用 Unity 时遇到问题 错误是 当前类型 Business Interfaces IPersonnelBusiness 是 接口 无法构造 您是否缺少类型映射 由于堆栈溢出 我已将 Unity 更新到最新版本issue
  • Laravel PHPunit Dataprovider 错误“指定的数据提供者无效”

    我正在使用 dataprovider 并从数据库中获取数据 public function logoProvider result Event inRandomOrder gt select id gt whereNotNull logo
  • 如何在 bash 中使用变量的值作为另一个变量的名称[重复]

    这个问题在这里已经有答案了 我想声明一个变量 其名称来自另一个变量的值 我编写了以下代码 a bbb a ccc 但没有成功 完成这项工作的正确方法是什么 eval用于此目的 但如果您天真地这样做 将会出现令人讨厌的转义问题 这种事情通常是
  • 地址窗口扩展

    我有一个 32 位应用程序 需要非常大的内存 我注意到有一种东西叫做地址窗口扩展 http msdn microsoft com en us library aa366527 28v vs 85 29 aspx 然而 我还没有找到太多关于如
  • Django:将整个模型对象集转换为单个字典

    如果您从 Google 来到这里寻找听写模型 请跳过我的问题 直接跳到第一个答案 我的问题只会让你感到困惑 Django 中有没有一种好方法可以将整个模型对象集放入单个字典中 我的意思是 像这样 class DictModel models
  • 您可以使用多个过滤器调用 Directory.GetFiles() 吗?

    我正在尝试使用Directory GetFiles 方法来检索多种类型的文件列表 例如mp3 s and jpg的 我尝试过以下两种方法 但没有成功 Directory GetFiles C path mp3 jpg SearchOptio
  • asterisk agi (php) 文件调试

    有谁知道调试 asterisk 的 agi secript a2billing php 所需的步骤 如果我从 Linux 控制台调用 php cli 我就可以远程调试它 但如果它从 asterisk 内部运行 则不起作用 知道如何调试它吗
  • 更改Fiddler根证书以成功解密HTTPS

    有没有办法更改Fiddler的根证书 当客户端应用程序使用证书固定并且我可以访问密钥库 其证书受到客户端应用程序信任 时 我希望使用它 我想你是在问 我可以更改 Fiddler 用于特定站点的证书吗 而不是root证书 用于所有站点 是的
  • 为什么使用 std::make_* 而不是构造函数更好?

    STL中有一些函数以make 前缀如std make pair std make shared std make unique等等 为什么使用它们而不是简单地使用构造函数是更好的做法 auto pair2 std pair lt int d
  • 添加 VPC 配置后调用 lambda 超时

    我正在使用无服务器框架来创建 lambda 我创建了一个简单的 Lambda 函数 它从 Mongo 实例进行查询并返回响应 最初 我使用 publicIp 创建了 Mongo 实例 并让 Lambda 使用 publicIP 访问该实例
  • 在 mysql 脚本中静默“Query OK 0 row受影响”输出

    我有一个创建多个存储过程的 MySQL 脚本 我想让大家沉默 Query OK 0 rows affected 0 00 sec 当我运行时出现的消息 source MY SCRIPT sql 它变成了一个很长的列表 我有时会忘记在开发过程
  • Visual Studio 2010 中的 Microsoft 图表控件?

    这可能吗 我安装了它们 但它们没有出现 我必须导入它们还是什么 如果在工具箱中看不到 Chart 控件 请右键单击工具箱 选择 选择项 然后在 NET Framework 组件 选项卡中选择以下命名空间 System Web UI Data
  • 设置带有子包的 python 包的正确方法

    我正在尝试在 python 中设置一个带有子包的包 这是我目前拥有的树结构 myPackage init py mySubPackage1 foo2 py foo py init py mySubPackage2 bar2 py bar p
  • Android SQLiteOpenHelper - 每个表都有不同的类?

    我正在读这篇文章 http www vogella com tutorials AndroidSQLite article html http www vogella com tutorials AndroidSQLite article
  • 像 TinyPNG 这样的图像优化 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在 Google 上搜索过一个好的 Mass Image Optimizer 可以在 Windows
  • 如何从 Android 中的菜单项调用 Activity?

    我试图通过单击菜单按钮来调用 startActivity myIntent 但我的应用程序此时崩溃了 通过常规按钮单击 相同的 startActivity 调用可以正常工作 因此 我认为菜单按钮缺少有关上下文的信息 或者也许我在这里完全偏离