Android-从活动到片段的导航

Android-从活动到片段的导航,android,android-fragments,android-activity,android-navigation,android-savedstate,Android,Android Fragments,Android Activity,Android Navigation,Android Savedstate,我正在开发一些应用程序,我有一个问题 我有: 1.FrameLayout中具有ListFragment的活动A(导航抽屉模式): xml: 活动B,在ListFragment中显示ListView的详细数据 如何使用ListFragment的保存UI从活动B返回(使用导航向上按钮)到活动A(如果使用Home back返回,活动将重新创建)。 顺便说一句,如果我按下手机上的“后退”按钮,“活动”不会重新创建并返回到以前的状态。要防止第一个要重新创建的活动,可以做的一件事是,当按下“后退”按钮

我正在开发一些应用程序,我有一个问题

我有: 1.FrameLayout中具有ListFragment的活动A(导航抽屉模式): xml:


  • 活动B,在ListFragment中显示ListView的详细数据
  • 如何使用ListFragment的保存UI从活动B返回(使用导航向上按钮)到活动A(如果使用Home back返回,活动将重新创建)。
    顺便说一句,如果我按下手机上的“后退”按钮,“活动”不会重新创建并返回到以前的状态。

    要防止第一个要重新创建的活动,可以做的一件事是,当按下“后退”按钮时,只需在第二个“活动”上调用
    finish()

    未测试,但我相信id是android.R.id.home,因此您只需在第二个活动中覆盖选项ItemSelected,如下所示:

    /**
     * Handles the selection of a MenuItem.
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
            case android.R.id.home:
                finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    

    使用完导航后,将重新创建上一个活动。为了防止在保留向上导航的同时发生这种情况,您可以获取父活动的意图,如果父活动存在,则将其放在最前面,如果不存在,则创建父活动

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                Intent parentIntent = NavUtils.getParentActivityIntent(this);
                parentIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                startActivity(parentIntent);
                finish();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
    

    我还在清单中指定了
    launchMode=“singleTop”
    。但我不确定这是否有必要。

    你是说在操作栏上出现一个向上按钮吗?@McAdam331是的。在活动A中,此按钮打开抽屉,在活动B中,此按钮返回谢谢!你帮了我!很高兴我能帮忙!:)如果您从该活动启动应用程序(使用通知或类似方式),这会中断导航。@EpicPandaForce如果我在android清单中指定父活动,它会返回到父活动,不是吗?如果您编写
    finish()
    并从挂起的意图(通知)启动活动?我不这么认为。这就是为什么UP navigation最初被设计的原因,尽管它对于如何正常地重新创建以前的活动有点忙碌。@EpicPandaForce我将测试它,我以前从未做过,所以我不知道答案。我做过,我做了,这样子活动就得到了“启动器”的意图。如果是这种情况,则“向上”按钮实际上不会正确重定向到父级,它只会完成当前活动。这就是我提出“黑客”的原因,也就是说我在上面发布了。:)
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                Intent parentIntent = NavUtils.getParentActivityIntent(this);
                parentIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                startActivity(parentIntent);
                finish();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }