Navigation Drawer et bottom navigation view
Bonjour,
Je suis débutant dans le domaine des applications android. J'ai lancé un projet android studio avec une navigation drawer activity. Pas de problème majeur pour la faire fonctionner, car la plus grosse partie a été faite par android studio.
Puis, j'ai rajouter des bottom navigation view sur cette activity. J'ai réussi à faire fonctionner ces boutons. J'ai créé des fragments que je remplacer dans le nav_host_fragment lorsque j'avais un appuie sur un des boutons.
Le problème est l'association des deux objets. Les fragments sont bien remplacé entre ceux de la navigation drawer et pareil pour ceux du bottom navigation view. Mais j'ai systématiquement 2 fragments sur mon activity : le fragment sélectionné par la navigation drawer et le fragment du bottom navigation view.
Est-il possible de combiné les 2 ? Je pense que oui mais je pense que le problème principal est la compréhension du code généré par android studio lors de la création de la navigation drawer activity.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| package com.example.applicationandroidcathild;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.example.applicationandroidcathild.ui.AlarmFragment;
import com.example.applicationandroidcathild.ui.MyInstallationFragment;
import com.example.applicationandroidcathild.ui.SecurityFragment;
import com.example.applicationandroidcathild.ui.gallery.GalleryFragment;
import com.example.applicationandroidcathild.ui.home.HomeFragment;
import com.example.applicationandroidcathild.ui.send.SendFragment;
import com.example.applicationandroidcathild.ui.share.ShareFragment;
import com.example.applicationandroidcathild.ui.tools.ToolsFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationView;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class AccueilActivity extends AppCompatActivity {
private AppBarConfiguration mAppBarConfiguration;
private BottomNavigationView bottomNav;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_accueil);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
bottomNav = (BottomNavigationView) findViewById(R.id.bottom_navigation);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_account, R.id.nav_settings, R.id.nav_confidentiality, R.id.nav_contact)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); //lier la barre d'outils au contrôleur de navigation
NavigationUI.setupWithNavController(navigationView, navController);
bottomNav.setOnNavigationItemSelectedListener(navListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.accueil, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
Fragment selectedFragment = null;
switch (menuItem.getItemId()){
case R.id.action_home:
selectedFragment = new HomeFragment();
break;
case R.id.action_myinstallation:
selectedFragment = new MyInstallationFragment();
break;
case R.id.action_alarm:
selectedFragment = new AlarmFragment();
break;
case R.id.action_security:
selectedFragment = new SecurityFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.nav_host_fragment, selectedFragment).commit();
return true;
}
};
} |
J'ai aussi changé de méthode avec le code ci-dessous. Il fait bien les changements de fragments entre les deux objets mais j'ai le fragment "home" qui reste en fond :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
| package com.example.applicationandroidcathild;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.core.view.GravityCompat;
import androidx.fragment.app.Fragment;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.example.applicationandroidcathild.ui.AlarmFragment;
import com.example.applicationandroidcathild.ui.MyInstallationFragment;
import com.example.applicationandroidcathild.ui.SecurityFragment;
import com.example.applicationandroidcathild.ui.gallery.GalleryFragment;
import com.example.applicationandroidcathild.ui.home.HomeFragment;
import com.example.applicationandroidcathild.ui.send.SendFragment;
import com.example.applicationandroidcathild.ui.share.ShareFragment;
import com.example.applicationandroidcathild.ui.tools.ToolsFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationView;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class AccueilActivity extends AppCompatActivity {
private AppBarConfiguration mAppBarConfiguration;
private BottomNavigationView bottomNav;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_accueil);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
bottomNav = (BottomNavigationView) findViewById(R.id.bottom_navigation);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_account, R.id.nav_settings, R.id.nav_confidentiality, R.id.nav_contact)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
//calling the method displayselectedscreen and passing the id of selected menu
displaySelectedScreen(menuItem.getItemId());
//make this method blank
return true;
}
});
bottomNav.setOnNavigationItemSelectedListener(navListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.accueil, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
displaySelectedScreen(menuItem.getItemId());
return true;
}
};
private void displaySelectedScreen(int itemId) {
Fragment selectedFragment = null;
switch (itemId){
case R.id.action_home:
selectedFragment = new HomeFragment();
break;
case R.id.action_myinstallation:
selectedFragment = new MyInstallationFragment();
break;
case R.id.action_alarm:
selectedFragment = new AlarmFragment();
break;
case R.id.action_security:
selectedFragment = new SecurityFragment();
break;
case R.id.nav_home:
selectedFragment = new HomeFragment();
break;
case R.id.nav_account:
selectedFragment = new GalleryFragment();
break;
case R.id.nav_settings:
selectedFragment = new ToolsFragment();
break;
case R.id.nav_confidentiality:
selectedFragment = new ShareFragment();
break;
case R.id.nav_contact:
selectedFragment=new SendFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.nav_host_fragment, selectedFragment).commit();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
} |
Comment est géré la transition des fragments dans le code généré automatiquement du navigation drawer ?
Merci beaucoup