Navigation drawer, handling the back button to go to previous fragments?

后端 未结 6 1683
陌清茗
陌清茗 2020-12-02 14:45

I\'m using the built-in navigation drawer to run my app. I can\'t quite figure out how to handle the back button. When it\'s pressed I want it to load the very first fragmen

6条回答
  •  旧时难觅i
    2020-12-02 15:00

    I have 4 fragment attached to bottomnavigation activity and i recently got into this problem and successfulyy solved as follows my activity code

    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.fragment.app.Fragment;
    import androidx.fragment.app.FragmentTransaction;
    import androidx.navigation.NavController;
    import androidx.navigation.Navigation;
    import androidx.navigation.ui.NavigationUI;
    
    import android.os.Bundle;
    import android.view.MenuItem;
    
    import com.google.android.material.bottomnavigation.BottomNavigationView;
    
    public class BottomNavigationActivity extends AppCompatActivity
    {
        NavController navController;
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_bottom_navigation);
    
    
            BottomNavigationView bottomNavigationView=findViewById(R.id.bottom_navigation);
            bottomNavigationView.setOnNavigationItemSelectedListener(navListener);
    
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new FragmentHome()).commit();
    
    
        }
    
        public boolean onSupportNavigateUp() {
            return navController.navigateUp();
        }
    
        private BottomNavigationView.OnNavigationItemSelectedListener navListener= new
                BottomNavigationView.OnNavigationItemSelectedListener()
                {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item)
                    {
    
                        Fragment selectedFragment = null ;
    
    
                        switch (item.getItemId())
                        {
    
                            case R.id.nav_home:
                                selectedFragment = new FragmentHome();
    
                                break;
    
                            case R.id.nav_search:
                                BottomNavigationActivity.this.getSupportFragmentManager().beginTransaction()
                                        .addToBackStack(null)
                                        .commit();
                                selectedFragment=new FragmentSearch();
                                break;
    
                            case R.id.nav_cart:
                                BottomNavigationActivity.this.getSupportFragmentManager().beginTransaction()
                                        .addToBackStack(null)
                                        .commit();
                                selectedFragment=new FragmentCart();
                                break;
    
                            case R.id.nav_user:
                                BottomNavigationActivity.this.getSupportFragmentManager().beginTransaction()
                                        .addToBackStack(null)
                                        .commit();
                                    selectedFragment= new FragmentAccount();
                                            break;
    
    
                        }
    
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                                selectedFragment).commit();
    
                        return true;
    
                    }
                };
    
    
        @Override
        public void onBackPressed()
        {
            int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
            if (backStackEntryCount == 0) {
                super.onBackPressed();
            } else
                {
                goHome();
            }
        }
    
        public void goHome()
        {
            //Following code will set the icon of the bottom navigation to active
            final BottomNavigationView mBottomNav = findViewById(R.id.bottom_navigation);
            MenuItem homeItem = mBottomNav.getMenu().getItem(0);
            mBottomNav.setSelectedItemId(homeItem.getItemId());
            getSupportFragmentManager().popBackStackImmediate();
    
            //To delete all entries from back stack immediately one by one.
            int backStackEntry = getSupportFragmentManager().getBackStackEntryCount();
            for (int i = 0; i < backStackEntry; i++) {
                getSupportFragmentManager().popBackStackImmediate();
            }
            //To navigate to the Home Fragment
            final FragmentHome homeFragment = new FragmentHome();
            FragmentTransaction myFragmentTransaction = getSupportFragmentManager().beginTransaction();
            myFragmentTransaction.replace(R.id.fragment_container, homeFragment, "HomeFrag Tag");
            myFragmentTransaction.commit();
        }
    }
    

提交回复
热议问题