Bonjour à tous !
Je débute sous Android, et je suis actuellement en stage pour faire une application mobile d'espace client, hélas les devs de la boîte ne connaissent pas Android et je me retrouve un peu livrée à moi-même pour ce qui relève spécifiquement d'Android.
Voilà donc mon souci :
- J'ai une MainActivity "HomeActivity" qui possède une toolbar en haut et une bottomnavigationview en bas.
Sur la bottomnavigationview, il y a 5 icones :
- Accueil
- Assistance
- Contrats
- Factures
- Compte
Le login est dans une activité à part donc lorsqu'on arrive sur la "home" activity, on arrive sur le fragment "Accueil".
Sur mon Navgraph, pour la section qui me pose problème la navigation se fait de la façon suivante :
accueil -> Compte ->Contacts
compte est un nested graph, contact en est un autre.
Quand je veux accéder aux contacts depuis le compte, par l'action "simple", aucun problème, tout fonctionne nickel, l'icone "compte" de la bottomnavview est selectionnée quand je suis dans les contacts,et absolument tout le reste de ma navigation fonctionne aussi SAUF :
- J'ai un lien vers "contacts" dans ma page d'accueil. J'ai essayé de le faire avec une global action mais j'ai une erreur :
De plus, mon bouton popback fonctionne, même pour les pop personnalisés (par exemple faire back au milieu d'une étape de modification renverrai au fragment racine) mais pas mon bouton PopUp, il ne reagit pas aux clicks, c'est comme s'il n'existait pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapp, PID: 16697 java.lang.IllegalArgumentException: navigation destination com.example.myapp:id/action_global_contacts is unknown to this NavController
Je vous mets le code de ma home activity :
Mon navgraph :
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 public class HomeActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { //Android default code, do not touch _______________________________________________________ super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); //__________________________________________________________________________________________ //Toolbar instanciation Toolbar toolbar = findViewById(R.id.toolbar); toolbar.setBackgroundColor(getResources().getColor(R.color.toolbar_color)); setSupportActionBar(toolbar); Objects.requireNonNull(getSupportActionBar()).setTitle(null); //Bottom Navigation : selected item by default at activity launch BottomNavigationView bView = findViewById(R.id.bottom_navigation); //Bottom botnavigation bar bView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED); //This line is to force the display of texts under nav icons. Otherwise, only the active icon has its label visible. //Making it reactive to in-fragment links //We add the fragment container layout to our botnavigation controller so it observes botnavigation. // To change the way the navController interacts with layout, please see Res>Navigation>Nav_graph.xml NavController navController = Navigation.findNavController(this, R.id.fragmentContainer); NavigationUI.setupWithNavController(bView, navController); NavigationUI.setupActionBarWithNavController(this, navController); }
Code XML : 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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212 <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/navgraph_bottomview" app:startDestination="@id/mnuHome"> <fragment android:id="@id/mnuHome" android:name="com.example.myapp.Fragments.Home.Home" android:label="fragment_home" tools:layout="@layout/fragment_home" > <action android:id="@+id/action_mnuHome_to_accountMain" app:destination="@id/mnuAccount" /> <action android:id="@+id/action_mnuHome_to_mnuBills" app:destination="@id/mnuBills" /> <action android:id="@+id/action_mnuHome_to_mnuContracts" app:destination="@id/mnuContracts" /> <action android:id="@+id/action_mnuHome_to_mnuHelp" app:destination="@id/mnuHelp" /> </fragment> <fragment android:id="@id/mnuBills" android:name="com.example.myapp.Fragments.Bills.BillsMain" android:label="fragment_bills_main" tools:layout="@layout/fragment_bills_main" /> <fragment android:id="@id/mnuContracts" android:name="com.example.myapp.Fragments.Contracts.ContractsMain" android:label="fragment_contracts_main" tools:layout="@layout/fragment_contracts_main" /> <navigation android:id="@id/mnuHelp" app:startDestination="@id/mnuHelp" > <fragment android:id="@id/mnuHelp" android:name="com.example.myapp.Fragments.Help.Help" android:label="fragment_help" tools:layout="@layout/fragment_help"> <action android:id="@+id/action_mnuHelp_to_helpStep2" app:destination="@id/helpStep2" /> <action android:id="@+id/action_mnuHelp_to_supportHistory" app:destination="@id/supportHistory" /> </fragment> <fragment android:id="@+id/helpStep2" android:name="com.example.myapp.Fragments.Help.HelpStep2" android:label="fragment_help_step2" tools:layout="@layout/fragment_help_step2"> <action android:id="@+id/action_helpStep2_to_helpStep3A" app:destination="@id/helpStep3A" /> <action android:id="@+id/action_helpStep2_to_helpStep3B" app:destination="@id/helpStep3B" /> <action android:id="@+id/action_helpStep2_to_supportHistory" app:destination="@id/supportHistory" app:popUpTo="@id/mnuHelp" /> </fragment> <fragment android:id="@+id/helpStep3B" android:name="com.example.myapp.Fragments.Help.HelpStep3B" android:label="fragment_help_step3_b" tools:layout="@layout/fragment_help_step3_b" > <action android:id="@+id/action_helpStep3B_to_mnuHelp" app:destination="@id/mnuHelp" app:popUpTo="@id/mnuHelp" /> </fragment> <fragment android:id="@+id/helpStep3A" android:name="com.example.myapp.Fragments.Help.HelpStep3A" android:label="fragment_help_step3" tools:layout="@layout/fragment_help_step3" > <action android:id="@+id/action_helpStep3A_to_helpStep4A" app:destination="@id/helpStep4A" /> </fragment> <fragment android:id="@+id/supportHistory" android:name="com.example.myapp.Fragments.Help.SupportHistory" android:label="fragment_support_history" tools:layout="@layout/fragment_support_history" > <action android:id="@+id/action_supportHistory_to_mnuHelp" app:destination="@id/mnuHelp" /> </fragment> <fragment android:id="@+id/helpStep4A" android:name="com.example.myapp.Fragments.Help.HelpStep4A" android:label="fragment_help_step4a" tools:layout="@layout/fragment_help_step4a" > <action android:id="@+id/action_helpStep4A_to_mnuHelp" app:destination="@id/mnuHelp" /> <action android:id="@+id/action_helpStep4A_to_helpStep5A" app:destination="@id/helpStep5A" /> </fragment> <fragment android:id="@+id/helpStep5A" android:name="com.example.myapp.Fragments.Help.HelpStep5A" android:label="fragment_help_step5" tools:layout="@layout/fragment_help_step5" > <action android:id="@+id/action_helpStep5A_to_mnuHelp" app:destination="@id/mnuHelp" app:popUpTo="@id/mnuHelp" /> </fragment> </navigation> <navigation android:id="@id/mnuAccount" app:startDestination="@id/mnuAccount" > <fragment android:id="@id/mnuAccount" android:name="com.example.myapp.Fragments.Account.AccountMain" android:label="fragment_account_main" tools:layout="@layout/fragment_account_main"> <action android:id="@+id/action_mnuAccount_to_accountAboutUs" app:destination="@id/accountAboutUs" /> <action android:id="@+id/action_mnuAccount_to_accountChangePassword" app:destination="@id/accountChangePassword" /> <action android:id="@+id/action_mnuAccount_to_accountEditInformations" app:destination="@id/accountEditInformations" /> </fragment> <navigation android:id="@id/contacts" app:startDestination="@id/contactsList"> <fragment android:id="@+id/contactDisplayOne" android:name="com.example.myapp.Fragments.Account.ContactDisplayOne" android:label="fragment_contact_display_one" tools:layout="@layout/fragment_contact_display_one"> <action android:id="@+id/action_contactDisplayOne_to_contactEditOne" app:destination="@id/contactEditOne" /> </fragment> <fragment android:id="@+id/contactAddOne" android:name="com.example.myapp.Fragments.Account.ContactAddOne" android:label="fragment_contact_add_one" tools:layout="@layout/fragment_contact_add_one" > <action android:id="@+id/action_contactAddOne_to_contactsList" app:destination="@id/contactsList" app:popUpTo="@+id/contactsList" /> </fragment> <fragment android:id="@+id/contactsList" android:name="com.example.myapp.Fragments.Account.ContactsList" android:label="fragment_account_watchcontacts" tools:layout="@layout/fragment_account_watchcontacts"> <action android:id="@+id/action_contactsList_to_contactAddOne" app:destination="@id/contactAddOne" app:popUpTo="@+id/contacts" /> <action android:id="@+id/action_contactsList_to_contactEditOne" app:destination="@id/contactEditOne" /> <action android:id="@+id/action_contactsList_to_contactDisplayOne" app:destination="@id/contactDisplayOne" /> </fragment> <fragment android:id="@+id/contactEditOne" android:name="com.example.myapp.Fragments.Account.ContactEditOne" android:label="fragment_contact_edit_one" tools:layout="@layout/fragment_contact_edit_one"> <action android:id="@+id/action_contactEditOne_to_contactsList" app:destination="@id/contactsList" app:popUpTo="@+id/contactsList" /> </fragment> </navigation> <fragment android:id="@+id/accountAboutUs" android:name="com.example.myapp.Fragments.Account.AccountAboutUs" android:label="fragment_account_about_us" tools:layout="@layout/fragment_account_about_us" /> <fragment android:id="@+id/accountChangePassword" android:name="com.example.myapp.Fragments.Account.AccountChangePassword" android:label="fragment_account_change_password" tools:layout="@layout/fragment_account_change_password" /> <fragment android:id="@+id/accountEditInformations" android:name="com.example.myapp.Fragments.Account.AccountEditInformations" android:label="fragment_account_edit_informations" tools:layout="@layout/fragment_account_edit_informations" > <action android:id="@+id/action_accountEditInformations_to_mnuAccount" app:destination="@id/mnuAccount" app:popUpTo="@id/mnuAccount" /> </fragment> <action android:id="@+id/action_global_contacts" app:destination="@id/contacts" /> </navigation> </navigation>
Et le layout de mon activity avec le navhost fragment :
Code XML : 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 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Activities.HomeActivity"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="56dp" android:backgroundTint="@color/toolbar_color" app:logo="@drawable/login_logo" app:titleMargins="5dp" android:paddingStart="10dp" android:paddingEnd="10dp" /> <fragment android:id="@+id/fragmentContainer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/toolbar" android:layout_marginTop="0dp" android:layout_marginBottom="0dp" android:scrollbarStyle="insideOverlay" android:name="androidx.navigation.fragment.NavHostFragment" app:navGraph = "@navigation/navgraph_bottomview" app:defaultNavHost="true"> </fragment> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="56dp" android:layout_alignParentStart="true" android:layout_alignParentBottom="true" app:itemBackground="@color/navbar_background_color" app:itemIconTint="@color/navbar_colors" app:itemTextColor="@color/navbar_colors" app:menu="@menu/navbar" /> </RelativeLayout>
Le xml de ma bottomnavigationview :
Code XML : 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 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/mnuHome" android:icon="@drawable/ic_home_black_24dp" android:title="@string/home" /> <item android:id="@+id/mnuHelp" android:icon="@drawable/icon_help" android:title="@string/help" /> <item android:id="@+id/mnuContracts" android:icon="@drawable/icon_contracts" android:title="@string/contracts" /> <item android:id="@+id/mnuBills" android:icon="@drawable/icon_bill" android:title="@string/bills" /> <item android:id="@+id/mnuAccount" android:icon="@drawable/icon_account" android:title="@string/account" /> </menu>
Voilà n'hésitez pas à me dire si vous avez besoin de code supplémentaire ou quoi, et pardon d'avance pour les trucs qui paraîtraient aberrants, je navigue entre les tutos depuis la mi-octobre pour arriver à m'en sortir ^^° Mais on trouve tout et n'importe quoi et entre les trucs deprecated et les trucs pas fiables c'est dur de s'y retrouver.
Merci d'avance![]()
Partager