【问题标题】:Android Activities, Tabs, Back ButtonAndroid 活动、选项卡、后退按钮
【发布时间】:2023-03-05 15:44:01
【问题描述】:

我正在编写我的第一个 Android 应用程序。它是 iPhone 应用程序的一个端口,底部有 3 个选项卡,分别称为 A、B 和 C。选项卡 A 有 4 个子活动(A1、A2、A3、A4),选项卡 B 有 3 个子活动,选项卡 C 有 2 个儿童活动。

对于 Android 应用,我真的不想在底部显示 iPhone 样式的标签栏。事实上,我宁愿完全没有标签栏(这样我可以使用更多屏幕),而是使用菜单按钮在活动 A、B 和 C 之间切换。

我真的很难选择实现这一点的最佳方法,这也需要正确处理后退按钮。

我已阅读有关活动的 Android 开发人员说明并尝试了这一点(使用意图标志来禁用“向左滑动”效果)这适用于在 A1、B1、C1 之间切换,但如果您已导航 A1, A2,然后是 C1 我不知道如何让后退按钮转到 A2(它转到 A1)

我还阅读了有关使用选项卡的信息,并尝试对此进行测试。然而,后退按钮没有被处理,只是退出了应用程序。我意识到我可以自己处理堆栈并覆盖后退按钮,并且我需要使用 ActivityGroups。但是我还没有找到任何关于如何处理 ActivityGroup 中的后退按钮的好例子,并且还读到如果 Group 中的一个活动是 ListActivity,则在处理后退按钮时存在错误,我也打算使用它。

任何帮助或指示将不胜感激,以帮助我开始。

【问题讨论】:

  • 您能否展示您如何调用子活动,这可能会提供线索。正如您所描述的一般问题发生在 TabHost 上,但如果您只是通过菜单调用活动,则不应该发生。

标签: android android-activity tabs stack back


【解决方案1】:
  1. 如果您使用 TabHost,则很难处理,我不建议这样做

  2. 如果您使用上下文菜单而不是正常调用每个活动(!不与活动组一起)应该将活动放入活动堆栈并使后退按钮的标准功能可用。

或者,您可以通过一个单独的菜单视图来模仿底部菜单,您可以将其包含到所有布局中,这将避免 TabHost 限制,但外观相同。

【讨论】:

    【解决方案2】:

    这就是我使用菜单按钮的方式。在你的主要活动中有这样的东西:

    首先,新建一个 android xml 文件并将类型设置为 menu(它是 eclipse 中的下拉菜单之一),然后 menu.xml 文件将自动在正确的位置创建。

    打开布局,添加 3 个项目(每个要切换到的页面一个)

        // Menu button pressed
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.page1:
            startActivity(new Intent(this, page1Activity.class));
            break;
        case R.id.page2:
            startActivity(new Intent(this, page2Activity.class));
            break;
        case R.id.page3:
            startActivity(new Intent(this, page3Activity.class));
            break;
        }
        return true;
    

    page1Activity 和其余的是其他类。

    确保在布局的 Id 部分中有 @+id/page1 等...

    只需将这些活动添加到您的清单中,它应该可以工作。后退按钮可以正常工作(尽管我没有尝试使用列表视图。使用列表视图你应该只有一个完成();当你选择一些东西以避免多个列表时)

    要切换子页面,请使用以下代码:

    public void page1aPressed(View button) {
        Intent nextPage = new Intent();
        nextPage.setClassName("com.example",
                "com.example.page1a");
        startActivity(nextPage);
    

    当您按下返回时,它只会转到上一个活动。也许我想错了,但它对我有用。

    【讨论】:

    • 您好,感谢您的回复。我拥有的代码与您在上面发布的代码完全相同。我的问题是这三个页面中的每一个都有子页面。它正在处理那些给我带来问题的导航:(即第1页按下按钮转到子页面,例如第1a页(不是第2页或第3页),然后是第3页菜单,按回并转到第1页(不是页面1 个子页面)
    • 好的,这听起来像是它将处理备份子活动。如果他们进入 1a、1b、然后菜单并选择第 3 页然后菜单并选择第 1 页,我该如何处理它。我希望它在那时显示第 1b 页(即他们访问的最后一个活动子页面)但它是显示 1a,因为我的菜单被硬编码为启动活动 page1a。我是否需要使用 3 个堆栈来跟踪它们所在的子活动,并让 1a、2a 和 3a 在它们恢复时检查堆栈以查看它们应该显示哪些活动?
    • 我一直在研究 Fragments(使用平台
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多