0

Iam travaillant sur une page où j'ai trois boutons fonctionnant comme des onglets, et en cliquant sur l'un d'eux le comportement devrait être que le FrameLayout (conteneur Fragment) ci-dessous devrait remplacer le fragment avec le prévu un.FragmentTransaction Remplacer seulement fonctionne une fois

enter image description here

dans onCreate de l'activité que j'ai cette méthode, de sorte que le récipient montre le premier fragment, (ceci fonctionne très bien):

ProductDetailInformacoesFragment infoFragment = new ProductDetailInformacoesFragment(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.product_detail_fragment_container, infoFragment); 

Alors j'ai une instruction switch qui est appelé sur les différents écouteurs pour les boutons, de sorte que le bon fragment est montré:

public void switchFragment(int fragmentPos) 
{ 
    switch (fragmentPos){ 
     case 0: 
      ProductDetailInformacoesFragment infoFragment = new ProductDetailInformacoesFragment(); 
      FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
      ft.replace(R.id.product_detail_fragment_container, infoFragment); 
      ft.commit(); 
      break; 

     case 1: 
      ProductDetailCaracteristicasFragment caracteristicasFragment = new ProductDetailCaracteristicasFragment(); 
      FragmentTransaction ftt = getSupportFragmentManager().beginTransaction(); 
      ftt.replace(R.id.product_detail_fragment_container, caracteristicasFragment); 
      ftt.commit(); 
      break; 
     case 2: 
      ProductDetailAvaliacoesFragment avaliacoesFragment = new ProductDetailAvaliacoesFragment(); 
      FragmentTransaction fttt = getSupportFragmentManager().beginTransaction(); 
      fttt.replace(R.id.product_detail_fragment_container, avaliacoesFragment); 
      fttt.commit(); 
      break; 
     default: 
      break; 
    } 
} 

XML:

  <FrameLayout 
      android:id="@+id/product_detail_fragment_container" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/base_view" 
      android:background="@android:color/white"/> 

Le problème est lorsque je clique sur l'un des onglets, le conteneur de fragment devient blanc (blanc) et le fragment souhaité n'est pas montré, peu importe laquelle je clique (même celui qui est déjà montré). Que fais-je tort ?? - J'ai essayé de définir ft.addToBackStack (null) n'a pas aidé.

Répondre

0

. Vous devez contrôler si votre frament est nul avant de l'instancier et l'ajouter au conteneur. Si votre fragment est instancié, vous devriez simplement le montrer. Si vous cliquez sur un bouton, vous pouvez afficher le fragment souhaité en utilisant l'astuce mentionnée ci-dessus, puis masquer les autres fragments. Vous devez utiliser la fonctionnalité ActionBar d'android. et utilisez Tab au lieu de votre bouton. onTabSelected() onTabUnselected() pour gérer respectivement les opérations sur votre Tab comme attacher ou détacher des Fragments. tout est détaillé dans le forum du développeur android. Voici l'URL http://developer.android.com/guide/topics/ui/actionbar.html alors allez à la section "Ajout d'onglets de navigation" pour une explication complète un exemple.

ici est la vue d'ensemble du code pour gérer la sélection et désélection de vos onglets en utilisant AndroidSupport

public void onTabSelected(Tab tab, FragmentTransaction fT) { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    switch (tab.getPosition()) { 
    case your_tab_position: 
     if(your_fragment == null){ 
      your_fragment = new Your_fragment(); 
      ft.add(R.id.your_container, your_fragment, your_tag); 
     } 
     else{ 
      ft.show(your_fragment); 
      } 

     break; 
. 
. 
. 
} 
} 

public void onTabUnselected(Tab tab, FragmentTransaction fT) { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 

    switch (tab.getPosition()) { 
    case your_tab_position: 
     if(your_fragment != null){ 
      ft.hide(your_fragment); 
     } 
     break; 
. 
. 
. 
} 
} 
Questions connexes