2013-05-29 3 views
0

Je travaille avec des fragments avec le concept ViewPager. Je crée une application de journal intime dans laquelle j'utilise seulement un fragment qui obtient toutes les mises à jour de base de données et montre dedans. Jusqu'à ce que tout se passe bien ... Selon mon exigence quand je clique sur un bouton en fragment je dois montrer un autre fragment qui permet à l'utilisateur de stocker les images. - Si j'utilise la méthode de remplacement dans les fragments, elle ne remplaçait pas correctement dans le sens où A est un fragment constitué de viewpager et B un fragment que je veux remplacer.
--Then si j'utilise remplacer B est visible, mais aussi sous A apparaît le fragment BFragment n'a pas pu remplacer avec fragment dans viewpager

FragmentManager m=getActivity().getSupportFragmentManager(); 
       FragmentTransaction ft = getActivity().getSupportFragmentManager() 
         .beginTransaction(); 
       Demobutton demobutton = new Demobutton(); 

       ft.replace(R.id.lay, demobutton); 
       ft.commit(); 

espère que vous avez compris mon problème. Si vous pensez que ma question est incomplète, faites-le moi savoir.

+0

est R.id.lay l'id du fragment de conteneur? – Blackbelt

+0

pas son ID de disposition de viewpager – Ramz

+0

c'est faux. le premier argument de remplacer doit être l'ID du conteneur – Blackbelt

Répondre

0

J'ai deux suggestions en fonction de la façon dont vous utilisez le DemoButton Fragment:

1) Peut-être que votre problème est avec des fragments imbriqués. Vous obtenez le FragmentManager de l'activité, mais si le démobutton fait déjà partie d'un fragment, utilisez à la place getChildFragmentManager() du fragment externe.

2) D'après mon expérience lors de l'utilisation d'un ViewPager avec des fragments, le PagerAdapter du ViewPager devrait faire toutes les transactions de fragment. Vous pouvez étendre et écraser la classe FragmentPagerAdapter de la bibliothèque de support afin d'obtenir le fragment correct dans votre ViewPager lorsque vous en avez besoin.

+0

j'ai travaillé avec la première solution, mais je n'ai pas trouvé de résultat, il a été montré comme il est dans le passé ...., – Ramz

0

J'ai développé un petit exemple d'application qui réalise cela sans écraser les classes natives.

Le point est d'utiliser un fragment comme un conteneur.

Dans votre ViewPagerAdapter:

@Override 
public Fragment getItem(int position) { 
    /* 
    * IMPORTANT: This is the point. We create a RootFragment acting as 
    * a container for other fragments 
    */ 
    if (position == 0) 
     return new RootFragment(); 
    else 
     return new StaticFragment(); 
} 

mise en page de RootFragment devrait ressembler à:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/root_frame" > 
</FrameLayout> 

Vous pouvez revoir mon explication complète ici: https://stackoverflow.com/a/21453571/1631136

+0

corrigé ici aussi :) – dlao

+0

:-) 15 caractères .... – kleopatra

Questions connexes