【问题标题】:Android - How to update a display after a tab switch?Android - 如何在标签切换后更新显示?
【发布时间】:2011-07-27 17:03:16
【问题描述】:

我有一个带有 TabHost 和三个选项卡的应用程序。他是我如何创建每个标签的示例:

    intent = new Intent().setClass(this, Setup.class); //intent.getClass()
    spec = tabHost.newTabSpec("setup").setIndicator("",
                    res.getDrawable(R.drawable.tab_setup))
                    .setContent(intent);
    tabHost.addTab(spec);

我的目标是,当您切换到新选项卡时,调用一个方法来更新该选项卡上显示的信息。

这里有一个问题:标签如何知道它已被显示?

【问题讨论】:

    标签: android tabs android-intent android-tabhost


    【解决方案1】:

    由于您为TabHost 中的每个选项卡使用Activity,因此您应该使用Android 的lifecycle 调用来更新您的UI 上的信息。

    每次切换到另一个选项卡的Activity 时都会调用onResume(然后在最后一个选项卡的活动中调用onPause)。这会将您的代码保存在适当的位置,以防您决定使用不同的 UI 来托管这些活动。

    @Override
    public void onResume() {
        super.onResume();
        // Update your UI here.
    }
    

    【讨论】:

    • 正中目标。再次感谢。
    【解决方案2】:

    使用所需代码覆盖您的活动类中的OnTabChangeListener

    【讨论】:

    • 我相信在选项卡中运行活动时也会使用应用程序生命周期。所以 onPause 和 onResume 也是很好的选择。
    • Austyn,这也取决于他们是使用 Tab 本身还是 TabHost 中的片段。我认为 OnTabChangeListener 是解决这个问题的更安全的方法,但如果他们使用片段,你的方式可能确实更通用,更好的方式来处理这个问题。另外不要忘记为您认为正确的答案投票,否则人们不会看到它们! :)
    • 我不明白您所说的“标签本身”是什么意思。您可以在 TabHost 中托管 ViewActivityFragmentView 是唯一不使用生命周期调用的东西。 Activity 重用建议将更新 View 的代码放在 onResume 中,以防他想将此代码移出 TabHost。我也不认为你的答案是正确的。您链接到的此方法位于 TabHost 小部件中,而不是 Activity 中。这需要在您的 TabHost 中被覆盖,这可能不应该更新您的活动视图。
    • 对不起,当我这么说时,我的意思是使用 View 的 TabHost。我很抱歉我没有更清楚!
    • 获胜者是 OnPause 和 OnResume。感谢 Austyn 的热门歌曲。 :-) 我已经能够使用 TabChangeListener 检测到变化,但我只是一个 android 新手,对活动的生命周期一无所知。再次感谢。
    【解决方案3】:

    onTabChangeListener 在选项卡更改时有效,如果没有(您单击同一选项卡)则不会被调用,不确定这对您的应用程序是否重要。

    如果您想要所有事件而不仅仅是更改,我想您可以捕获tab click event。我认为第二个提议的解决方案不起作用的原因是他们没有顺便调用 super.onClick(event)。

    【讨论】:

    • 这给出了选项卡更改发生时的机制。这并没有回答关于我如何访问与选项卡关联的类的问题。我在哪里可以找到对选项卡活动对象的引用。在上面的示例中,我如何获得对 Setup 类的引用?
    • 我看不出这个答案被否决的任何理由。在您尝试询问某些内容之前,请在您的案例中提供相关信息,为我们提供“与选项卡关联的类”。这个答案正是你应该如何开始做你想做的事。我怀疑这个社区的人会根据你的需要给你确切的解决方案,但会让你知道如何开始或指出你错在哪里。
    • 你没有。您应该使用 Activity 的代码来管理 Activity 的 UI,而不是其父级。 TabHost 只是一个容器,除了添加各个活动之外,不需要太多代码。
    • @Austyn 确切地说,UI 元素应该只包含所需的覆盖,并带有回调活动/控制器
    • #codingCat - 这不是你问的问题,如果你想要一个具体的答案问一个具体的问题,你真的认为人们会理解你的内心想法吗,天哪。
    【解决方案4】:

    我认为使用选项卡的目的是在第一次单击时加载选项卡,然后保持静止状态直到用户发出刷新命令。我会在菜单中使用新按钮。

    但是,如果您需要在每次单击时更新选项卡,那么为什么不使用几个简单的按钮呢?单击它们时,您可以轻松交换内容区域。

    【讨论】:

    • 是和不是。您的解决方案很容易实施。但是,如果应用程序自行更新,大多数用户都会喜欢它。此外,通过让选项卡自行更新,您可以将该选项卡上的所有代码保持在选项卡本地,从而使生成的代码更具可移植性。
    • 并非如此。事实上,大多数用户不喜欢更新自己的标签。这就是为什么它是大多数选项卡实现(例如 Swing、VB、C#、Flex)中选项卡的默认行为。 iphone 等等。
    • 我想这是一个见仁见智的问题。我可以这么说,我从未在任何平台上看到过在一个选项卡上输入信息并且需要用户交互才能将其拉入另一个选项卡的应用程序。恕我直言,要求点击这样做是违反直觉的。
    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 2018-03-17
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    相关资源
    最近更新 更多