活动A开始B开始C.为什么按下C中的后退按钮会回到A?

时间:2016-07-13 20:18:21

标签: android android-intent android-activity

我是Android编程的新手。

我有一个MainActivity,我可以从中启动SecondActivity:

[...]
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("mode", eTravelEditMode.Create);
startActivityForResult(intent, MainActivity.REQUEST_CREATE);
[...]

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == MainActivity.REQUEST_CREATE) {
    }
}

在SecondActivity中,我启动了ThirdActivity:

[...]
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivityForResult(intent, SecondActivity.REQUEST_SELECT);
[...]

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //this method is never called
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == SecondActivity.REQUEST_SELECT) {
        [...]
    }

在ThirdActivity中:

@Override
public void onBackPressed() {

    Intent intent = new Intent();
    //intent.putExtra("returnValue", (Serializable) mAdapter.getSelectedValues());
    setResult(SecondActivity.RETURN_SELECT, intent);

    super.onBackPressed();
    this.finish();
}

From ThirdActivity我想按后退按钮时将值返回到其父SecondActivity。 但是,从未调用过SecondActivity.onActivityResult。 调用MainActivity.onActivityResult。

关于什么是错的任何想法?

3 个答案:

答案 0 :(得分:2)

无论您在为Android开发方面有多么有经验,处理意图和管理活动堆栈都是棘手的。一般来说,您不应该按后退按钮以便在应用逻辑中向前移动。我有3点:

  1. 解释:如果您想从ThirdActivity回到SecondActivity,只需 调用finish()会为你做这件事,因为你开始了第三个 使用startActivityForResult(intent)与使用的活动 startActivity(意向)。所以我认为你的代码中发生的是什么 你实际上是通过android的Back Stack返回的 导航系统,再次通过finish()返回。所以你回去两次,这就是为什么你要回到主要活动。我想。

    可以找到有关活动堆栈和后退导航的更多信息 这里: https://developer.android.com/training/implementing-navigation/temporal.html

  2. 建议:尝试添加一个按钮,并在该按钮的onClick()方法中有 你的finish(),而不是使用android后退导航。我会远离你使用你的后退按钮作为 适用于您的应用的进展方式。
  3. 建议:如果逻辑上用户将从ActivityTwo转到 ActivityThree并返回ActivityTwo,我要么拥有 finish()是您的应用逻辑的自然进展,因为 通常,你想要的startActivityForResult(意图)vs startActivity(意图)。

答案 1 :(得分:0)

我刚刚看了一下我的AndroidManifest.xml:

<activity android:name=".forms.SecondActivity"
          android:label="@string/mylabel"
          android:noHistory="true"
>

我删除了“android:noHistory =”true“”,现在一切顺利。 我认为从helloworld复制/粘贴,我很困惑! :) 谢谢

答案 2 :(得分:-2)

试试这个!

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent intent = new Intent(CurrentActivity.this, A.class);
    startActivity(intent);
}