0

J'ai essayé d'exprimer le titre que je peux, mais à la base dans le HomeActivity j'ai un menu personnalisé avec un tas de fragments. L'un d'entre eux est HomeFragment qui contient un de 2 onglets avec un viewpager ..!Viewpager ne fonctionnera pas en appuyant sur retour d'une barre d'outils

Tout fonctionne correctement.! mais à l'intérieur du fragment de menu, lorsque l'utilisateur clique sur le bouton de retour sur la barre d'outils est de retourner à la HomeFragment. Une méthode de remplacement de fragment fera l'affaire que je l'ai déjà utilisé pour remplacer entre les fragments en choisissant dans le menu!

Mais dans ce cas, le HomeFragment s'ouvre mais le Tablayout ne répond pas! on a l'impression que le fragment n'est pas créé correctement !?

J'ai essayé d'utiliser une nouvelle intention de la même activité qui ouvre HomeFragment par défaut, et elle s'ouvre mais avec le même problème ..!


Le problème

enter image description here


Le code

HomeFragment

// code.. 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_home, container, false); 
    InitViews(rootView); 

    TabLayoutAdapter adapter = new TabLayoutAdapter(getFragmentManager()); 
    pager.setAdapter(adapter); 
    tabLayout.setupWithViewPager(pager); 


    return rootView; 
    } 

// code.. 

Menu Fragment

// code.. 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.to_home: 

    replaceFragment(new HomeFragment()); 

     // tried this and it's the same problem 
     // startActivity(new Intent(getActivity(), HomeActivity.class).setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)); 
     return true; 
     default: 
     return super.onOptionsItemSelected(item); 
    } 
    } 

    public void replaceFragment(Fragment fragment) { 
    android.support.v4.app.FragmentTransaction t = getFragmentManager().beginTransaction(); 
    t.replace(R.id.Container, fragment); 
    t.commit(); 
    } 

    // code.. 

Répondre

2

En regardant le code, je pense que vous devez utiliser getChildFragmentManager() au lieu de getFragmentManager() et de l'utiliser pour la transaction de fragment.

La définition de getChildFragmentManager() est la suivante: Renvoyer un FragmentManager privé pour placer et gérer des fragments à l'intérieur de ce fragment.

Et la définition de getFragmentManager() est la suivante: Renvoie le gestionnaire de fragmentation pour interagir avec des fragments associés à l'activité de ce fragment.

Remplacer cette ligne de code ayant getFragmentManager() par getChildFragmentManager()

TabLayoutAdapter adapter = new TabLayoutAdapter(getChildFragmentManager()); 

également dans le menu Fragment

android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction(); 
+0

il me donne 'java.lang.IllegalArgumentException: Pas de vue trouvée pour id 0x7f0d008a (XXX.XXXX: id/conteneur) pour le fragment GamesFragment {2b77c84 # 2 id = 0x7f0d008a} ' –

+0

Où est ce GamesFragment? – Anonymous

+0

C'est le menu Fragment ..! c'est le code est posté dans la question! pourquoi pensez-vous que cette erreur montre.!? –