I have one activity and some fragments and try to use navigation controller. I choose menu item, fragment changed. But when I press back button only drawer opens. Here is my code:
public class MainActivity extends AppCompatActivity implements HomeFragment.OnFragmentInteractionListener, LibraryFragment.OnFragmentInteractionListener, UserProfileFragment.OnFragmentInteractionListener {
private DrawerLayout drawerLayout;
private NavigationView navigationView;
private Toolbar toolbar;
public NavController navController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navController = Navigation.findNavController(this, R.id.nav_host_fragment);
drawerLayout = findViewById(R.id.drawer_layout);
navigationView = findViewById(R.id.nav_view);
initDrawer();
View header = navigationView.getHeaderView(0);
View userPicture = header.findViewById(R.id.user_pic);
userPicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showUserProfile();
}
});
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
switch (item.getItemId()){
case android.R.id.home:
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else if (navController.popBackStack()){
} else {
drawer.openDrawer(GravityCompat.START);
}
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onFragmentInteraction(Uri uri) {
}
private void initDrawer(){
Toolbar toolBar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolBar);
ActionBar actionBar = getSupportActionBar();
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout);
NavigationUI.setupWithNavController(navigationView, navController);
}
private void showUserProfile(){
if(drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
}
navController.navigate(R.id.userProfileFragment);
}
}
What do I do wrong? Thanks in advance