Comment mettre en œuvre d'afficher et de masquer fragment à l'intérieur du fragment dans android
Comment mettre en œuvre d'afficher et de masquer fragment à l'intérieur du fragment dans Android? J'ai ajouté deux fragment à l'intérieur de l'activité. Un fragment contenant le menu et un fragment de contenir des sous menu. J'ai beaucoup de bouton dans le menu fragment comme à la maison, idée, etc. Si je clique sur l'idée bouton. J'ai pour afficher le sous-menu. Si j'ai de nouveau cliquez sur l'idée bouton, je dois cacher le sous-menu. Quelqu'un peut-il fournir exemple, ou comment accéder à un point de vue fragment dans un autre fragment?
c'est ma mise en page principale
?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<fragment class="com.gcm.fragment.CommonFragment"
android:id="@+id/the_frag"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<fragment class="com.gcm.fragment.SubFragment"
android:id="@+id/the_frag1"
android:layout_marginTop="130dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Dans Mon fragment
package com.gcm.fragment;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class CommonFragment extends Fragment implements OnClickListener {
TextView txtIhaveIdea=null;
boolean menuVisible=false;
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.collapsed_menu2, container, false);
txtIhaveIdea=(TextView)layout.findViewById(R.id.txtIhaveAnIdea);
txtIhaveIdea.setOnClickListener(this);
return layout;
}
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
if(!menuVisible)
{
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.beginTransaction();
Fragment fragOne = new SubFragment();
ft.show(fragOne);
}
else
{
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.beginTransaction();
Fragment fragOne = new SubFragment();
ft.hide(fragOne);
}
}
}
Grâce
- Se référer à un code de référence pour les fragments de masquer/afficher les donnée sur android site developer.android.com/resources/samples/ApiDemos/src/com/...
- a u réalisé ur de la tâche?
Vous devez vous connecter pour publier un commentaire.
L'examen de cette question a plus de 2K .., une réponse peut toujours aider les nouveaux lecteurs donc, ici, il va:
Donc ce que je fais et fonctionne de la même amende est de définir une interface pour le Fragment et de donner une méthode, dire needsHide():
Puis le mettre en œuvre sur votre Activité:
La seule partie qui demande de la réflexion, c'est quand appeler needsHide(), ce que vous pourriez faire dans votre Fragment de la onViewCreated, puisque vous êtes sûr que c'est pas trop tôt pour votre MainActivity, pour valider des transactions. Si vous le placez onCreate (), il peut ne pas fonctionner en fonction de ce que vous faites avec oter fragments:
Vous pourriez essayer d'obtenir framelayout ou fragment par id et le changement de sa visibilité
Simplement, créer une méthode publique dans votre "parent" de l'activité. qui cache le fragment.
Puis de l'intérieur du fragment dans votre événement click obtenir le "parent| de l'activité, la lancer, puis d'appeler la méthode que vous avez créé.
Vous avez besoin d'utiliser une Interface pour communiquer avec votre parent Activité.
Prendre un coup d'oeil sur Vogella du tutoriel, "3.4. Demande de communication avec des Fragments". Voici la lien
méthode
hide()
:Masque existant fragment. Ce n'est pertinente que pour des fragments dont les vues ont été ajouté à un conteneur, comme ce sera la cause de la vue pour être caché.votre code :
Ci-dessous le code a fonctionné pour moi..