我有一个包含 3 个 Fragment 的 MainActivity 类(每个 Fragments 都在自己的类中) 我的第三个 fragment (LoginFragment)将允许用户登录,然后转到一个新 Activity (新 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();
直接进入 fragment 1 就好了,就像完成第三个 fragment 一样,谢谢:)
最佳答案
我用这个想法解决了这个问题 onBackPressed() 我调用一个新的 Intent,但带有 extras 在具有 3 个 fragment onRestart() 的 MainActivity 中,我检查它是否来自此类(具有额外内容)而不是转到此 fragment (单击、替换、删除)
@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);
}
}
关于java - onbackpressed() 从 Activity 到特定 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46897698/