onbackpressed() 从活动到特定片段



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

如果我按回去,该意图将返回到登录片段。我覆盖@OnBackPressed以启动主活动:

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

我需要知道如何在 MainActivity 中用 LauncherFragment(片段 1)替换该片段。

我有这个解决方案,但根据设备需要 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 会很酷,就像完成第三个片段一样,谢谢:)

我解决了这个想法中的问题onBackPressed()我称之为新的意图,但有额外的在具有 3 个片段的主活动中,我检查它是否来自这个类(有那个额外的),而不是去这个片段(点击,替换,删除)

@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();
}

在主活动上我得到了这个

@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);
        }
    }

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

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

最新更新