Java 记住覆盖onBackPressed的意图中使用的路径
我正在处理安卓系统中的某个问题,我很难找到可行的解决方案 情况如下: 我有4个活动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
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);
}