【问题标题】:onbackpressed() from Activity to Specific Fragmentonbackpressed() 从活动到特定片段
【发布时间】:2017-10-23 20:12:08
【问题描述】:

我有一个带有 3 个片段的 MainActivity 类(每个片段都在自己的类中) 我的第三个片段(LoginFragment)将允许登录一个用户,然后转到一个新活动(新 Intent),其中包含该用户的一些信息,例如产品。

如果我按回那个 Intent 将返回到 LoginFragment。 我重写了@OnBackPressed 来启动MainActivity:

Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
this.finish();

我需要知道如何用 MainActivity 中的 LauncherFragment(Fragment 1)替换那个 Fragment。

我有这个解决方案,但根据设备需要 0.5 秒到 1-2 秒

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
this.finish();

如果想完成第三个片段,直接转到片段 1 会很酷,谢谢 :)

【问题讨论】:

  • 你在真机上测试这段代码吗?
  • @DavidHackro 在 Nexus 6p 和模拟器上是的,如果我理解这些标志将重新创建片段,这就是延迟
  • 如果设备需要 1-2 秒来创建片段或启动活动,则出现问题。
  • @JeffreyBlattman 我的 Nexus6p 是 0.5 秒或更快,但这是一个很好的设备,那么其他 80% 速度较慢的设备呢

标签: java android android-fragments android-intent


【解决方案1】:

我解决了这个想法中的问题 onBackPressed() 我调用了一个新的 Intent 但带有 extras 在具有 3 个片段 onRestart() 的 MainActivity 中,我检查它是否来自此类(具有附加功能)而不是转到该片段(单击、替换、删除)

@Override
    public void onBackPressed() {
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra(Constants.Intents.NAVIGATE_BACK, true);
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        this.finish();

}

在 MainActivity 我得到了这个

@Override
    protected void onRestart() {
        super.onRestart();
        Intent intent = getIntent();
        boolean navigate = intent.getBooleanExtra(Constants.Intents.NAVIGATE_BACK, false);
        if (navigate) {
            View homeView = bottomNavigationView.findViewById(R.id.home);
            homeView.performClick();
            intent.removeExtra(Constants.Intents.NAVIGATE_BACK);
        }
    }

【讨论】:

    【解决方案2】:

    如果您希望它尽可能快,请使用一个活动和片段来改变内容。添加片段不会创建新窗口,而活动会。

    还要查看片段/活动启动中的应用程序逻辑(onCreate()onResume() 等)。这将是主要因素。

    【讨论】:

    • 我尝试了所有的想法,当 OnRestart 在 MainActivity 上调用然后转到 LoginFragment 我试图了解如何转到 LauncherFragment 如何完成该 LoginFragment
    • 你没有“完成”一个片段。您可以在顶部“添加”一个新片段,可以将其“替换”为另一个片段,也可以“删除”该片段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2021-03-03
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多