安卓:从活动 A 跳转到 C,但通过返回按钮从 C 到 B 再到 A,如何实现?

3

我有三个活动:A,B,C。 活动A可以启动B或C。 当A启动C时,我可以通过按下返回按钮返回到A。但我想要“返回”到B,然后再到A(第二次按下返回按钮)。

我尝试以这种方式使用TaskBackStack:

final TaskStackBuilder builder = TaskStackBuilder.create(this)
    .addParentStack(this)
    .addNextIntent(new Intent(this, B.class))
    .addNextIntent(new Intent(this, C.class));
builder.startActivities();

但是它不起作用...有人能帮我吗?

对不起我的英语,提前感谢。


4
你会尝试在网站上做这件事吗?如果不会,为什么要在 Android 应用程序上尝试呢? - CommonsWare
4
从用户体验角度来看,这似乎不太直观,对吗? - sdabet
尝试这个:http://stackoverflow.com/questions/12870563/i-want-to-end-the-whole-application-when-user-click-back-button-in-android/12871182#12871182 - Rahul Baradia
B是否可以启动C?如果不行,你是如何“返回”B的? - vikki
@vikki,你说得对,那真是愚蠢。 - jaisonDavis
显示剩余2条评论
4个回答

3
在您的活动C中覆盖onBackPressed方法。
                @Override
                public void onBackPressed() {
                    super.onBackPressed();
                    //finish();
                        Intent intent = new Intent(ActivityC.this,ActivityB.class);
                        startActivity(intent);
                     }

如果您在Activity A中编写完成,那么您可以返回Activity A。这就是使用意图的原因。在Activity B中也是如此。
@Override
public void onBackPressed() {
     super.onBackPressed();
     //finish();
     Intent intent = new Intent(ActivityB.this,ActivityA.class);
     startActivity(intent);
}

请告诉我现在的状态?


2

重写您的onKeyDown方法

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {

            //Do stuff, like launching a new activity

            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

1

1
在试图回答你的问题之前,我对你在活动之间导航的方法有一些评论。总的来说,这种方法不是一个好主意,因为这样做,你没有遵循Android Navigation Pattern,这可能会使你的应用程序不够用户友好,因为大多数Android应用程序使用Navigation Pattern。
Android Navigation Pattern说:
时间导航或历史屏幕之间的导航在Android系统中根深蒂固。所有Android用户都希望返回按钮将他们带回到上一个屏幕,而不考虑其他状态。历史屏幕集始终以用户的Launcher应用程序(手机的“主屏幕”)为根。也就是说,按Back键足够多次后,您应该回到Launcher,此后Back键将无效。
然而,在使用Android Pattern导航时还有另一种可能性,但我认为这不是你问题的解决方案。你可以看看Up Navigation。
最后,我有一个关于使用覆盖OnBackPressed()来启动新Activity的解决方案的相关评论。你真的应该避免这样做,因为使用它,你可能会让你的时间线导航变得混乱。因为当你在OnBackPressed中创建一个activity时,你总是将一个新activity放在Android堆栈上,所以这里有两个问题:
  1. 堆栈可以根据用户行为快速增长
  2. 很难退出你的应用程序(让你的堆栈变为空可能非常困难)

我可以在B中创建一个名为“DELEGATE_TO_C”的操作,然后从A启动它。在B中,我可以读取意图操作并启动C。你对这个情况有什么看法? - Artyom Shalaev
好的,我尝试做了类似的事情,但并不完美。让我解释一下:我没有使用“特定”的意图,而是在意图中添加了一个额外的布尔值(标志),以指示是否应该转到C,并在B的onCreate方法中读取它。然而,在调用startActivity之后,虽然C活动已经显示出来,当按下返回键时总是回到B。我可以看到B活动在C出现之前在屏幕上闪现,这在我看来是不好的。 - Bruno Mateus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接