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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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