【问题标题】:How to back from activity D to A如何从活动 D 回到活动 A
【发布时间】:2012-02-13 18:47:47
【问题描述】:

我有 4 个活动

A、B、C、D

A是主要活动,

B,C,D 是列表视图

我想做这样的事情:

从 A -> B -> C -> D

通过单击按钮从 A 开始活动 B,通过在 ListView 中选择项目从 B 开始下一个活动 C,通过在活动 C 中选择另一个项目来开始下一个活动 D。 最后,当D中选择项目时,返回活动A和完成活动B和C.

当不从 A

你能给我一些建议吗?这样做有什么用处:>?

问候, 风骚的

【问题讨论】:

  • 非常感谢大家的回答:) 在你们的帮助下我解决了我的问题
  • 别忘了标记合适的答案!只需单击适合您的答案旁边的复选框

标签: android android-activity android-intent activity-finish


【解决方案1】:

如果您完成了一项活动,请致电finish()。 检测子活动是否返回实现onActivityResult

【讨论】:

  • onActivityResult 是否知道活动结束后重启?
  • 使用 startActivityWithResult() 启动活动 C 和 D。在活动 D 中,当某物被选中时,调用 setResult(data),然后调用 finish()。然后在C上的onActivityResult()中做同样的事情,如果D成功完成,调用setResult()然后finish()
  • @dymmeh 我不确定你的意思。
  • 您通过在活动 A 中调用 startActivityForResult 来启动活动 B。当您运行此意图时,您在活动 A 上调用 finish()。活动 A 不再运行。您按回活动 B。预期结果将是重新启动活动 A。但是,您已经在此活动上调用了完成。活动 A 是否知道要重新启动以处理 onActivityResult?
  • @dymmeh 它被破坏了,所以它不会自动再次出现在这里!嗨。
【解决方案2】:

对于 A、B 和 C,您需要调用 startActivityForResult()。这允许您在启动 Activity 完成时收到通知。

来自 A:

Intent i = new Intent(this, B.class);
startActivityForResult(i, B_ACTIVITY);

...

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    if((resultCode == RESULT_OK) && (requestCode == B_ACTIVITY)) {
        // handle success
    }
}

来自 B(同样来自 C)

Intent i = new Intent(this, C.class);
startActivityForResult(i, C_ACTIVITY);

...

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    if((resultCode == RESULT_OK) && (requestCode == C_ACTIVITY)) {
        setResult(RESULT_OK);
        finish();
    }
}

当你在 D 中完成后,拨打setResult(RESULT_OK); 然后拨打finish(),一切都会如你所愿。后退按钮将自动正确处理。

【讨论】:

    【解决方案3】:

    您可以使用意图并捕获后退按钮:

    例如,从 B 到 A

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            switch(keyCode){
            case KeyEvent.KEYCODE_BACK:
                onBackPressed();
            }
            return super.onKeyDown(keyCode, event);
        }
    
    
        @Override
        public void onBackPressed() {
                Intent myIntent = new Intent(B.this,A.class);
                B.this.startActivity(myIntent);
        }
    

    【讨论】:

    • 默认情况下后退按钮应该可以正常工作,一般来说覆盖它不是一个好主意。
    【解决方案4】:

    如果您想从 D 转到 A,请使用 Intent 调用 A 并在 Intent (intent.setFlag()) 上设置标志 http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

    Intent intent = new Intent(D.this, A.class);
    intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    

    要从 B 回到 A,从 C 回到 B...,请仅使用 onBackPressed。 onBackPressed 方法完成当前活动,您将自动返回活动 A。不要覆盖 onBackPressed 方法!

    private void onClickBackButton() {
        onBackPressed();
    }
    

    在开发者android网站上查看FLAG信息:http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_BROUGHT_TO_FRONT

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多