Je passe les deux derniers jours de surfer sur le Web à la recherche d'une solution pour le prochain problème: J'ai une classe d'adaptateur dans un onglet dans la viewpager, j'essaie d'appeler un fragment lors de l'événement de clic via Fragment Manager. Lorsque le fragment est appeler, tout va bien, mais lorsque j'essaie de revenir à l'onglet précédent dans la dernière position n'est pas affichée, au lieu de cela, l'activité principale est montrée.
dans l'adaptateur: P>
getFragmentManager().popBackStackImmediate();
4 Réponses :
Il semble que les fragments ne soient pas ajoutés à Backstack code>. En supposant que vous utilisiez FragmentTransaction, ajoutez cette ligne de code avec l'autre code pour échanger des fragments:
Vous voulez dire, comment charger un fragment précédent au lieu d'une activité? Si tel est votre condition, alors suivez la méthode ONBackPressed (), si vous ajoutez un fragment dans la pile arrière:
onBackPressed() { super.onBackPressed(); getActivity().getFragmentManager().popBackStack(); }
OS Android fournit une fonction de pile arrière pour l'activité, elle fournit également une fonction de pile de retour pour fragmenter. Si vous ajoutez un fragment dans la pile arrière, lorsque vous appuyez sur le menu arrière de l'appareil Android, vous pouvez trouver le fragment enregistré dans la fenêtre de pile de retour. Jusqu'à ce que tous les fragments sauvegardés dans la fenêtre contextuelle de pile arrière, l'activité quitte.
fragmentTransaction.addToBackStack(true);
Si vous utilisez ViewPager à l'intérieur du fragment, utilisez Fragment's ChildrfagmentManager au lieu de FragmentManager.
Classe de fragment: P>
public class MyPagerAdapter extends FragmentPagerAdapter { private static int NUM_ITEMS = 3; public MyPagerAdapter(FragmentManager fragmentManager) { super(fragmentManager); } // Returns total number of pages @Override public int getCount() { return NUM_ITEMS; } // Returns the fragment to display for that page @Override public Fragment getItem(int position) { switch (position) { case 0: // Fragment # 0 - This will show FirstFragment return FirstFragment.newInstance(0, "Page # 1"); case 1: // Fragment # 0 - This will show FirstFragment different title return FirstFragment.newInstance(1, "Page # 2"); case 2: // Fragment # 1 - This will show SecondFragment return SecondFragment.newInstance(2, "Page # 3"); default: return null; } } // Returns the page title for the top indicator @Override public CharSequence getPageTitle(int position) { return "Page " + position; } }
Veuillez partager du code de sorte que nous ayons une meilleure idée de ce que vous avez tenté et de ce qui pourrait être faux.