1

J'ai une application qui utilise un BottomNavigationView pour naviguer entre les Fragments. L'un des fragments (SearchFragment) a une vue Tab, implémentée avec EasyTabs.Le contenu du fragment ne se charge pas sur BottomNavigationView FragmentTransaction

Lorsque je navigue vers SearchFragment pour la première fois, la mise en page se charge correctement, avec les 3 onglets renseignés. Le problème est que lorsque je navigue vers un autre fragment et que je retourne à SearchFragment, la mise en page ne se charge pas. Je reçois la vue Tabulation en haut de l'écran, mais le contenu n'est pas affiché, de sorte que j'ai besoin de naviguer entre les onglets pour les faire apparaître un par un.

méthode onNavigationItemSelected:

@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.tab_search: 
      mFragment = new SearchFragment(); 
      break; 
       /*case R.id.tab_history: 
        mFragment = new RadioFragment(); 
        break;*/ 
     case R.id.tab_desc: 
      Bundle bundle = new Bundle(); 
      bundle.putBoolean("fromSetup", false); 
      mFragment = new DescriptionFragment(); 
      mFragment.setArguments(bundle); 
      break; 
       /*case R.id.tab_config: 
        mFragment = new RadioFragment(); 
        break;*/ 
    } 
    final FragmentTransaction transaction = mFragmentManager.beginTransaction(); 
    transaction.replace(R.id.main_container, mFragment).addToBackStack(null).commit(); 
    return true; 
} 

EasyTabsBuilder intérieur SearchFragment:

EasyTabsBuilder.with(mTabs) 
      .addTabs(
        new TabItem(new SearchByDateFragment(), ""), 
        new TabItem(new SearchByEventFragment(), ""), 
        new TabItem(new SearchByDescriptionFragment(), "") 
      ) 
      .setTabsBackgroundColor(EasyTabsColors.White) 
      .setIndicatorColor(EasyTabsColors.Gray) 
      .setTextColors(EasyTabsColors.Black, EasyTabsColors.White) 
      .addIcons(
        R.drawable.ic_date_range_black_24dp, 
        R.drawable.ic_face_black_24dp, 
        R.drawable.ic_description_24px) 
      .hideAllTitles(true) 
      .Build(); 

Répondre

2

je me suis exactement le même problème avec une navigation en bas et une mise en page de l'onglet.

La seule solution que j'ai trouvée est de supprimer votre recherche Fragment et l'onglet 3 du gestionnaire de fragment. Vous pouvez le faire dans le onPageSelected de votre PageChangeListener

Exemple

 @Override 
     public void onPageSelected(int position) { 

      if (position != 3 && position != 2) { 
       List<Fragment> fragments = getSupportFragmentManager().getFragments(); 
       for (int i = fragments.size() -1; i >= 0; i--) { 
        if (fragments.get(i) != null) { 
         if (fragments.get(i).getClass() == OrderInProgressFragment.class || 
           fragments.get(i).getClass() == OrderFinishFragment.class || 
           fragments.get(i).getClass() == OrderFragment.class) { 
          getSupportFragmentManager().beginTransaction().remove(fragments.get(i)).commit(); 
          getSupportFragmentManager().executePendingTransactions(); 
         } 
        } 
       } 
      } 

      bottomNavigationView.getMenu().getItem(position).setChecked(true); 
     } 

Je suis arrivé 4 page sur mon bottomNavigation et mon fragment d'enlever sont en position 3. Donc le if est à vérifier si j'utilise mon fragment actuellement ou si je suis sur l'onglet précédent, sinon je supprime le OrderFragment qui contient l'onglet et les deux autres Tab à l'intérieur

+0

Cette méthode n'a pas fonctionné pour moi, mais j'ai utilisé ton idée! Sur la méthode 'onDestroyView' de' SearchFragment', j'ai supprimé tous les fragments liés à SearchFragment. – Minoru