我正在处理一个场景,其中我有一个名为HomeActivity
的Activity,其中包含BottomAppBar
,在该Activity中,当用户单击底部应用栏中的图标时,我正在加载片段。现在我面临的问题是,当我从主页Activity加载片段时,它会打开,但在按下后,它会退出应用,而不是重新加载主页Activity布局。相反,我想加载主页活动,每当按下返回在任何加载的片段代码段内附上下面:
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@SuppressLint("NonConstantResourceId")
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.homePage:
fragment = new Fragment1();
break;
case R.id.wallet:
fragment = new Fragment2();
break;
case R.id.myorders:
fragment = new Fragment3();
break;
case R.id.search:
fragment = new Fragment4();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.rl_mainLayout, fragment).commit();
return true;
}
});
此外,我有一个覆盖方法onBackPressed()
,它包含对方法finishAffinity()
的调用
@Override
public void onBackPressed() {
finishAffinity();
}
2条答案
按热度按时间nuypyhwy1#
只是不要总是调用
finishAffinity()
,它会破坏你的导航流...你应该在那里调用super
以获得正确的行为而
finishAffinity()
只是关闭所有的activity。真实的的问题是为什么你在onBackPressed
中有故意的finishAffinity()
调用,以及为什么你想知道它是工作的(不切换片段,只是关闭HomeActivity
和其他,如果在后台的activitys堆栈上)如果您确实需要
finishAffinity()
调用,您可能应该仅在第一个Fragment
可见时进行调用isFirstFragmentVisible()
由所有者作为家庭作业实现,最简单方法可能是在此方法中检查当前加载到R.id.rl_mainLayout
中的Fragment
(有用的可能是findFragmentById()
或findFragmentByTag()
)ht4b089n2#
根据我的假设,你正在尝试做的是。你有4个片段在家庭活动。假设用户点击片段2,然后如果他点击返回,那么片段1应该显示,而不是飞溅或应用程序退出。为此,使用下面的代码。
默认情况下,将currentFragment值设置为等于fragment1,然后在onNavigationItemSelected上相应地更改其值。