Android 动态更改处于已登录状态的片段,并保存';t登录

Android 动态更改处于已登录状态的片段,并保存';t登录,android,android-fragments,Android,Android Fragments,我有一个应用程序,允许用户不用登录就可以使用这些应用程序(当然也需要登录) 当用户尚未登录时,我希望我的应用程序显示一个请求用户登录的片段(LoginFragment)。 当用户已经登录时,我希望我的应用程序显示主片段(HomeFragment) 我使用firebase auth作为我的登录“功能”。 这是我的主要活动代码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(saved

我有一个应用程序,允许用户不用登录就可以使用这些应用程序(当然也需要登录)

当用户尚未登录时,我希望我的应用程序显示一个请求用户登录的片段(LoginFragment)。 当用户已经登录时,我希望我的应用程序显示主片段(HomeFragment)

我使用firebase auth作为我的登录“功能”。 这是我的主要活动代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mMainFrame = findViewById(R.id.main_frame);
    mMainNav = findViewById(R.id.main_nav);

    homeFragment = new HomeFragment();
    measureFragment = new MeasureFragment();
    accountFragment = new AccountFragment();
    loginFragment = new LoginFragment();

    setFragment(measureFragment);

    mMainNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()){
                case R.id.nav_measure:
                    setFragment(measureFragment);
                    return true;
                case R.id.nav_home:
                    mAuth = FirebaseAuth.getInstance();
                    mAuthListener = new FirebaseAuth.AuthStateListener() {
                        @Override
                        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                            Toast.makeText(MainActivity.this, "1", Toast.LENGTH_SHORT).show();
                            user = firebaseAuth.getCurrentUser();
                            if (user != null) {
                                Toast.makeText(MainActivity.this, "2", Toast.LENGTH_SHORT).show();
                                setFragment(homeFragment);
                            } else {
                                Toast.makeText(MainActivity.this, "3", Toast.LENGTH_SHORT).show();
                                setFragment(loginFragment);
                            }
                        }
                    };
                    return true;
                case R.id.nav_account:
                    setFragment(accountFragment);
                    return true;
                    default:
                        return false;
            }
        }
    });
}

private void setFragment(Fragment fragment) {
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.main_frame , fragment);
    fragmentTransaction.commit();
}
这是我的模型

  • 如果用户尚未登录

  • 如果用户已经登录


  • 检查方法的类型。我已经使用了这种方法,但我的代码不起作用。我需要一个代码解决方案什么不起作用?根据我在代码中看到的情况,您正在替换上一个片段,这样,您的反按将不会使您返回到上一个屏幕/片段。