Je rencontre des problèmes pour trouver une solution à ce problème.Accédez manuellement à la pile arrière Android
Fondamentalement, j'ai une charge d'onglets dans mon ActionBar. Lorsque chacun est touché, les fragments de l'onglet précédent sont détachés et les fragments du nouvel onglet sont ajoutés en utilisant replace (s'ils n'ont pas encore été instanciés) ou attachés (s'ils l'ont été). Je pense que j'ai obtenu cette méthode de Google et ça fonctionnait bien jusqu'à présent.
Exemple d'ajout de fragments d'un onglet:
if(tab.getText().equals(context.getString(R.string.title_class_tab))) {
if(browser == null) {
browser = CourseBrowserFragment.newInstance(false);
fragmentTransaction.replace(leftContainerId, browser);
} else {
fragmentTransaction.attach(browser);
}
if(lessonViewer == null) {
lessonViewer = LessonViewerFragment.newInstance(false);
fragmentTransaction.replace(rightContainerId, lessonViewer);
} else {
fragmentTransaction.attach(lessonViewer);
}
}
et la suppression:
if(tab.getText().equals(context.getString(R.string.title_class_tab))) {
if(browser != null) {
fragmentTransaction.detach(browser);
}
if(lessonViewer != null) {
fragmentTransaction.detach(lessonViewer);
}
}
Le problème provient de la mise en page que j'ai besoin pour l'un des onglets. Fondamentalement, c'est comme l'application Gmail. Il y a deux fragments (disons Panneau A et Panneau B) et quand vous appuyez sur un bouton, le Panneau A glisse, le Panneau B glisse vers l'ancienne position du Panneau A et un nouveau, le troisième (Panneau C) glisse de la droite. J'ai eu ce travail bien mais maintenant j'ai ajouté le FragmentTransaction coulissant à la pile arrière de sorte que l'utilisateur puisse toucher le bouton arrière et le panneau C va glisser vers l'arrière et le panneau A reviendra. Encore une fois, comme Gmail.
Sauf lorsque l'utilisateur accède à un autre onglet, cette transaction est toujours dans la pile arrière et s'exécute si l'utilisateur appuie de nouveau. Les fragments finissent dans des endroits fous. Ce que je dois faire est de le retirer de la pile arrière lorsque l'utilisateur navigue vers un autre onglet. Y a-t-il un moyen de le faire? FragmentManager ne semble pas vous permettre de retirer manuellement des choses de la pile arrière et l'utilisation de la méthode popBackStack() ne supprime pas simplement la transaction, mais l'exécute. Je veux l'enlever quand l'utilisateur navigue loin et le remet quand l'utilisateur revient.
Je pense que je peux me procurer le "Back Stack Entry" pour cette transaction en utilisant "getBackStackEntryAt" mais ce n'est pas très bien si je ne peux pas l'enlever et le remettre en place lorsque l'utilisateur revient à la languette.
La seule solution que je puisse penser est de ne pas utiliser la pile arrière et de passer outre onBackButtonPressed. De là, je pourrais faire un revers de la transaction si nécessaire.
Merci pour toute aide et désolé si je suis incohérent.