onbackpressed()从Activity到Specific Fragment

时间:2017-10-23 20:12:09

标签: java android android-fragments android-intent

我有一个带有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喜欢完成第三个片段谢谢:)

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我在这个想法中解决了这个问题 onBackPressed()我使用 extras 调用新的Intent 在具有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);
        }
    }