Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 记住覆盖onBackPressed的意图中使用的路径_Java_Android_Android Intent_Onbackpressed - Fatal编程技术网

Java 记住覆盖onBackPressed的意图中使用的路径

Java 记住覆盖onBackPressed的意图中使用的路径,java,android,android-intent,onbackpressed,Java,Android,Android Intent,Onbackpressed,我正在处理安卓系统中的某个问题,我很难找到可行的解决方案 情况如下: 我有4个活动A、B、C和D,以及两个可能的路径: 路径1:A、B、C、D 路径2:A,B',D B和B'指的是同一个活动,但视图不同(此处使用了recyclerview),具体取决于我最初使用的活动,即B或a 我想做的基本上是沿着这样的路径:A,B,C,D(直接)和D,C,B,A(持续按back时)。与第二个相同:A,B',D(直接)和D,B',A(持续按back时) 当按下back时,我有很多问题,所以我知道我必须覆盖onB

我正在处理安卓系统中的某个问题,我很难找到可行的解决方案

情况如下:

我有4个活动
A
B
C
D
,以及两个可能的路径:

路径1:
A、B、C、D

路径2:
A,B',D

B和B'指的是同一个活动,但视图不同(此处使用了recyclerview),具体取决于我最初使用的活动,即B或a

我想做的基本上是沿着这样的路径:
A,B,C,D
(直接)和
D,C,B,A
(持续按back时)。与第二个相同:
A,B',D
(直接)和
D,B',A
(持续按back时)

当按下back时,我有很多问题,所以我知道我必须覆盖
onBackPressed
。但我怎样才能准确地判断出我是哪种情况(路径1或路径2)

谢谢你的帮助,

试一下这个

// Add activity
public static void addActivities(String actName, Activity _activity) {
    if (Config.screenStack == null)
        Config.screenStack = new HashMap<String, Activity>();
    if (_activity != null)
        Config.screenStack.put(actName, _activity);
}

// Remove Activity
public static void removeActivity(String key) {
    if (Config.screenStack != null && Config.screenStack.size() > 0) {
        Activity _activity = Config.screenStack.get(key);
        if (_activity != null) {
            Config.screenStack.remove(key);
            _activity.finish();
        }
    }
}

如果你想在应用程序中完成所有活动,你可以查看我的答案,希望这能给你一些想法。嗨,请查看我的评论。任何帮助都将不胜感激!为什么需要重写
onBackPressed()
?标准的Android行为只会让你回到上一个
活动
。这听起来正是你想要的。嗨,大卫·瓦瑟,确切的情况实际上如下:Path1包含4个活动A、B、C、D和一个名为E的最后片段,我在其中根据在C中列表视图中选择的内容显示内容。D是片段E的基础。我面临的问题是,当我在E中按下后,我的应用程序崩溃了。所以我重写了onResume()以返回活动C。但是我遇到了上面提到的问题。。。不过,我还是很难接受安迪的建议。我可以处理很多路径,但当我在E中时,我无法知道我在哪条路径:1或2。在不覆盖onBackPressed()的情况下,通常会发生的情况是,我执行C-->E,然后按返回键将我引导到C,然后按返回键将我引导到E,依此类推,就像有一个循环一样!嗨,谢谢你的回答。我所做的是创建了一个名为StackHandler的类,每当我想添加一个活动时,我就调用StackHandler.addActivities(…),当我想删除一个活动时,我就调用StackHandler.removeActivities(…)。但我不知道该把它们放在哪里。我所做的是在每次创建活动A、B、C、D StackHandler.addActivities(“我参与的活动的名称”)时添加这些活动,并重写每次onBackPressed()以删除我参与的活动。但这对我不起作用!发生的事情是(在做了A-B-C-D之后),当我按下D键时,我返回到C,但当我按下C键时,它会将我带到D。这就是我现在面临的问题,我要做的是,假设我在活动D中,我想在按下后退按钮后返回到C,我覆盖了onBackPressed(),如下所示:Intent Intent Intent=new Intent(getApplicationContext(),C.class);StackHandler.removeActivity(“D”);startActivity(intent);我对其余的活动使用相同的逻辑。它对Path1很有效,但当我在B'时会出现问题,因为它会导致我到B…@MastafaF,例如,当你现在从A-B-C-D开始时,当你按BackPress时,你只需删除特定的活动,如removeActivity(“活动名称D”)不设置super.onBackpress()。如果您在B中,那么也很简单,只需在startActivity之前调用removeActivity(“Activity B”),因此在这种情况下,您没有Activity B的2堆栈。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addActivities("DemoActivity", DemoActivity.this)
    setContentView(R.layout.activity_create_feed_post);
}