【问题标题】:Cleaning up activities in android清理android中的活动
【发布时间】:2012-11-10 08:12:34
【问题描述】:

我有四个活动 a、b、c、d。活动 a 是主要活动,然后调用 b、c 和 d,然后进行一些计算。我知道我可以通过这些 activites 中的 android:noHistory="true" 属性来阻止该活动在我的应用程序中建立。但问题是,如果我在活动 c 中,当我按下后退按钮时,我想转到 b,但如果 d 完成,我希望删除 b 和 c,只显示 a。有什么办法可以做到这一点?

【问题讨论】:

  • 您是否已经为每个活动中的后退按钮编写代码?
  • 不。我没有覆盖后退按钮,因为我认为最好将后退按钮的功能留给 android 系统

标签: android


【解决方案1】:

将此代码放入您的每个活动中,每次稍作更改。这样你就可以覆盖后退按钮的正常功能

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            //start the desired activity
        }

        return super.onKeyDown(keyCode, event);
    }

另外,如果你只支持android 2.0+,那么你可以使用这个

@Override
public void onBackPressed() {
    // start your desired activity here
    return;
}

只需将其中任何一个放入您的每个活动中,然后开始正确的活动

要关闭一项特定活动,请查看此页面 - How to clear specific activity from the stack history?

【讨论】:

  • 问题不是我想覆盖后退按钮,而是关闭已经堆积在我的堆栈上的 n 个活动。
  • 您可以在开始新活动后使用finish() 执行此操作吗?
  • 不。这将简单地关闭所有活动 - 如果我在活动 c 中并且我使用 finish() 它会在我想关闭活动 b 时关闭 b,只有在活动 d 完成时才关闭 c。我想我现在最好的选择是在我的活动中使用 startActivityForResult()
  • 在他链接的其他问题/答案之后,请参阅 mdelolmo 的答案,而不是接受的答案。它显示了如何清除堆栈。 :)
【解决方案2】:

是的,可以通过确保在每个 startActivity 函数之后使用 finish() 函数来实现。除非在您希望最终显示的活动中。

所以...这是它的样子

A 中的代码:

startActivity(Intent to start activity B); 

B 中的代码:

startActivity(Intent to start activity C); 
Finish();

C 代码:

startActivity(Intent to start activity D); 
Finish();

这将确保每当活动 D 完成时,活动 C 也将因为完成而完成。由于这个 C 也完成了,活动 B 中的 Finish() 将关闭 B。由于活动 A 中没有 Finish(),因此该活动将显示在屏幕上。

如果要在D完成后才来ActivityA,则必须使用startActivityForResult并处理结果,并使用IF有条件地执行B&C中的Finish语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2011-08-16
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多