Ajout de fragments à une mise en page

J'essaie de rendre mon application plus compatible avec les tablettes, et j'essaie donc d'apprendre des fragments. Je veux la disposition typique à deux volets, où le côté gauche est la "navigation", et vous cliquez sur l'un des éléments, et cela change le fragment sur la droite.

Je peux dupliquer les tutoriels qui utilisent un ListFragment pour le gauche, et si vous cliquez sur l'un d'eux, il met à jour le fragment "détails" à droite.

  • Comment ajouter une vue flottante au gestionnaire de fenêtres Android et écouter les événements du bouton arrière du système / du matériel
  • Android: format de chaîne à double valeur
  • Puis-je utiliser adb.exe pour trouver une description d'un téléphone?
  • Ajouter des icônes à SlidingTabLayout au lieu de Texte
  • Comment puis-je mettre à jour mon ADT dans Eclipse?
  • Vous cherchez un moyen d'arrêter de forcer mon application en plein écran lorsque l'interstice admob s'affiche
  • J'ai essayé le meilleur que je peux pour dupliquer ce code, et j'utilise un LinearLayout, avec des boutons pour le côté gauche, de sorte que si un bouton est cliqué, il charge le fragment approprié sur la droite, mais ça ne marche pas. Lorsque je commet le FragmentTransaction, je reçois java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. Quel est le parent de l'enfant et pourquoi dois-je appeler removeView?

    J'essaie de charger le fragment dans un FrameLayout, mais j'ai également essayé de remplacer un autre Fragment dans la mise en page, et j'ai toujours l'erreur.

    Idéalement, je veux que le fragment gauche reprenne l'intégralité de l'écran jusqu'à ce qu'un bouton soit pressé, ce qui nécessite un fragment à partir de la gauche, mais un problème à la fois, je suppose.

    Code

    Activité principale

     public class FragmentExample2Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 

    SélecteurFragment (côté gauche)

     public class SelectorFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View fragment = inflater.inflate(R.layout.selector, container); Button button1 = (Button) fragment.findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { getFragmentManager().beginTransaction().replace(R.id.detail_holder, new DetailsFragment(), "stuff").commit(); } }); return fragment; } } 

    DétailsFragment

     public class DetailsFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ return inflater.inflate(R.layout.details, container); } } 

    Main.xml

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <fragment class="com.coreno.testfragment.SelectorFragment" android:id="@+id/select" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <fragment class="com.coreno.testfragment.DetailsFragment" android:id="@+id/detail_holder" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="2" /> <!-- <FrameLayout android:id="@+id/detail_holder" android:layout_width="0px" android:layout_height="match_parent" android:layout_weight="2" /> --> </LinearLayout> 

  • Comment puis-je donner un style audacieux dans Android?
  • Quelle est la fiabilité de la fonctionnalité getLastKnownLocation d'emplacementManager et à quelle fréquence est-elle mise à jour?
  • Lecture du son du clavier par défaut lorsque les boutons sont pressés dans Android
  • Gérer des seaux plus petits de GoogleFit ne fonctionne pas
  • Android Google Analytics - La connexion au service a échoué
  • Déterminez si l'application Android est la première fois utilisée
  • 2 Solutions collect form web for “Ajout de fragments à une mise en page”

    Lorsque vous gonfliez un fichier xml de mise en page, ne spécifiez pas la vue parent. Cela semble très intuitif pour ne pas préciser où vous mettez cette vue gonflée, mais cela fonctionne.

    Ainsi, par exemple, dans votre SelectorFragment, modifiez la ligne:

     View fragment = inflater.inflate(R.layout.selector, container); 

    à

     View fragment = inflater.inflate(R.layout.selector, null); 

    Ou même mieux

     View fragment = inflater.inflate(R.layout.selector, container, false); 

    N'oubliez pas de faire de même dans votre DétailsFragment.

    Lorsque vous gonfliez une mise en page dans la méthode getView d'un fragment, vous devez utiliser la méthode de gonflage suivante: inflater.inflate (R.layout.details, container, false );

    La clé est le troisième paramètre. Il doit être faux de ne pas attacher la disposition gonflée au conteneur, car le système l'a déjà fait. S'il est vrai ou n'est pas indiqué, une vue de groupe redondante est créée.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.