繁体   English   中英

onbackpressed()从活动到特定片段

[英]onbackpressed() from Activity to Specific Fragment

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

如果我按回该Intent,将返回到LoginFragment。 我重写@OnBackPressed以启动MainActivity:

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()这个问题上,我调用了一个新的Intent,但有其他功能 。在MainActivity中,它具有3个片段onRestart(),我检查它是否来自此类(具有该功能)而不是转到该片段(单击,替换,删除)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM