如何解决BottomNavigationView切换选项卡显示旧片段
我已经为这个答案严重堆积了数小时,但仍然找不到答案。
基本上,我要尝试的是如果用户未登录,则在底部的两个选项卡上显示登录屏幕,如果用户已登录,则显示实际的选项卡信息。这是我到目前为止的内容。
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
BottomNavigationView bottomNavigationView = findViewById(R.id.nav_view);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_tour_market,R.id.navigation_tours,R.id.navigation_profile)
.build();
NavController navController = Navigation.findNavController(this,R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this,navController,appBarConfiguration);
NavigationUI.setupWithNavController(bottomNavigationView,navController);
bottomNavigationView.setonNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// This means there is no user logged in
if (mAuth.getCurrentUser() == null) {
FragmentManager fm = getSupportFragmentManager();
switch (item.getItemId()) {
case R.id.navigation_tour_market:
fm.beginTransaction().replace(R.id.nav_host_fragment,new TourMarketFragment()).commit();
return true;
case R.id.navigation_tours:
case R.id.navigation_profile:
fm.beginTransaction().replace(R.id.nav_host_fragment,new LoginFragment()).commit();
return true;
}
}
else {
FragmentManager fm = getSupportFragmentManager();
switch (item.getItemId()) {
case R.id.navigation_tour_market:
fm.beginTransaction().replace(R.id.nav_host_fragment,new TourMarketFragment()).commit();
return true;
case R.id.navigation_tours:
fm.beginTransaction().replace(R.id.nav_host_fragment,new ToursFragment()).commit();
return true;
case R.id.navigation_profile:
fm.beginTransaction().replace(R.id.nav_host_fragment,new ProfileFragment()).commit();
return true;
}
return false;
}
});
}
}
所以我遇到的问题是,当我第一次启动该应用程序时,它没有显示登录片段,而是显示了应该显示的初始片段。当我单击要显示登录屏幕的两个选项卡之一时,它会正确显示登录屏幕,但它还会在后台显示原始片段。似乎该片段没有被替换或类似的东西。
在尝试进入任何switch语句之前,我还尝试通过调用此方法来清除Backstack:
for (int i = 0 ; i < getSupportFragmentManager().getBackStackEntryCount() ; i++) {
getSupportFragmentManager().popBackStack();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。