0

Dans mon StartActivity le BottomNavigationBar Listener a la configuration suivante:Android - PageView in new BottomNavigationBar - empêcher des fragments de recharge

private GuideFragment guideFragment = new GuideFragment(); 
private MapFragment mapFragment = new MapFragment(); 
private MoreFragment moreFragment = new MoreFragment(); 

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener 
     = new BottomNavigationView.OnNavigationItemSelectedListener() { 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     Fragment selectedFragment = null; 
     switch (item.getItemId()) { 
      case R.id.navigation_guide: 
       selectedFragment = guideFragment; 
       break; 
      case R.id.navigation_map: 
       selectedFragment = mapFragment; 
       break; 
      case R.id.navigation_more: 
       selectedFragment = moreFragment; 
       break; 
     } 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
     transaction.replace(R.id.content, selectedFragment); 
     transaction.commit(); 
     return true; 
    } 

}; 

Comme je l'ai mentionné ci-dessus, je veux éviter que les fragments sélectionnés rechargements toujours les sources/vue. J'ai essayé quelques-unes des choses comme - dans les fragments:

if (rootView == null) 
    inflater.inflate... 

Mais les fragments encore recréer la vue et la charge (dans mon cas) webresources nouveau.

je lis quelque chose qui pourrait aider un PageView, en particulier

offScreenPageLimit 

devrait faire la magie.

Ma question principale est où devrais-je implémenter un PageViewer - Est-ce possible dans mon StartActivity? Ou puis-je résoudre le problème d'une autre manière?

+0

Les contenus de vos fragments sont-ils directement ou indirectement liés? Autrement dit, le contenu de chaque fragment peut-il exister et avoir un sens sans les autres? Si ce n'est pas le cas, alors peut-être changer une navigation à onglets avec un 'ViewPager' répondrait mieux à vos besoins. – CzarMatt

+0

Les trois fragments sont dans une vue/onglet différent. View Pager a-t-il alors sa propre classe ou puis-je l'ajouter à mon activité? –

+0

Ou que je le comprends correctement - Devrais-je devoir supprimer le BottomNavigation et le remplacer par un ViewPager? –

Répondre

0

Je l'ai fait les garçons! Il n'y a pas de PageViewer nécessaire.

Voici ma solution (tout en StartActivity pas codée en fragments):

private final GuideFragment guideFragment = new GuideFragment(); 
private final MapFragment mapFragment = new MapFragment(); 
private final MoreFragment moreFragment = new MoreFragment(); 
private final android.app.FragmentManager fm = getFragmentManager(); 
Fragment active = guideFragment; 

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener 
     = new BottomNavigationView.OnNavigationItemSelectedListener() { 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.navigation_guide: 
       if(active != guideFragment) { 
        fm.beginTransaction().show(guideFragment).commit(); 
       } 
       else { 
        fm.beginTransaction().hide(active).show(guideFragment).commit(); 
       } 
       active = guideFragment; 
       break; 
      case R.id.navigation_map: 
       fm.beginTransaction().hide(active).show(mapFragment).commit(); 
       active = mapFragment; 
       break; 
      case R.id.navigation_more: 
       fm.beginTransaction().hide(active).show(moreFragment).commit(); 
       active = moreFragment; 
       break; 
     } 

     return true; 
    } 

}; 

et dans la liste onCreate la transaction est validée. fm.beginTransaction().add(R.id.content,moreFragment).commit(); fm.beginTransaction().add(R.id.content, mapFragment).commit(); fm.beginTransaction().add(R.id.content, guideFragment).commit();

Il est très important de valider le fragment du premier onglet (fragm3, fragm2, fragm1) si vous avez 3 onglets.

Performances très rapides sur le smartphone maintenant en ne chargeant pas chaque fragment nouveau/actualiser.