Je développe une application qui contient 2 fragments et je souhaite afficher le masque en fonction de mes besoins. Le code suivant a un exemple simple de mon problème. Cette activité Fragmentaire simple contient 1 bouton et un fragment de liste.
Cet exemple simple fonctionne parfaitement. mais je ne suis pas satisfait de show hide fragment. Si vous supprimez layout.setVisibility (View.GONE); à partir du code puis ft.hide (f); ne cachera pas le fragment. En fait, nous ne cachons pas le fragment que nous cachons le conteneur.
Ma question est la suivante: est-ce un moyen d'afficher des fragments de masquage? Sinon, veuillez expliquer avec un exemple testé Comment masquer et afficher des fragments car de nombreuses personnes sont confrontées à ce problème.
public class MainActivity extends FragmentActivity implements OnClickListener {
Fragment1 f;
Button b;
LinearLayout layout;
Fragment myf;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button) findViewById(R.id.button1);
layout = (LinearLayout) findViewById(R.id.ll);
f = new Fragment1();
}
@Override
public void onClick(View v) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
if (f.isHidden()) {
ft.show(f);
layout.setVisibility(View.VISIBLE);
b.setText("Hide");
} else {
ft.hide(f);
b.setText("Show");
layout.setVisibility(View.GONE);
}
ft.commit();
// TODO Auto-generated method stub
}
la source
Réponses:
Ne jouez pas avec les indicateurs de visibilité du conteneur - FragmentTransaction.hide / show le fait en interne pour vous.
La bonne façon de procéder est donc:
OU si vous utilisez android.support.v4.app.Fragment
la source
android.R.animator.fade_in
, etandroid.R.animator.fade_out
?De plus, vous pouvez faire dans un fragment (par exemple lorsque l'obtention des données du serveur a échoué):
la source
getView()
peut-êtrenull
quand il n'est pas encore initialisé.Salut, vous le faites en utilisant cette approche, tous les fragments resteront dans le conteneur une fois ajoutés initialement, puis nous révélons simplement le fragment souhaité et masquons les autres dans le conteneur.
Veuillez consulter https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments pour plus d'informations. J'espère pouvoir aider n'importe qui. Même si c'est une vieille question.
la source
la source
Essaye ça:
la source
À partir de mon code, par rapport à la solution ci-dessus, le moyen le plus simple est de définir une mise en page contenant le fragment, puis vous pouvez masquer ou afficher le fragment en contrôlant l'attribut de mise en page qui est aligné sur le mode de vue général. Aucun code supplémentaire n'est nécessaire dans ce cas et les attributs de déploiement supplémentaires du fragment peuvent être déplacés vers la mise en page externe.
la source
Cela a fonctionné pour moi
la source
les réponses ici sont correctes et j'ai aimé @Jyo l'idée Whiff d'une implémentation de fragment d'affichage et de masquage, sauf que la façon dont il l'a actuellement masquerait le fragment lors de la première exécution, j'ai donc ajouté un léger changement en ce que j'ai ajouté la vérification et l'affichage isAdded le fragment si ce n'est pas déjà
la source
Dans onCreate, après setContentView, j'ai caché deux fragments et les ai commis dans le gestionnaire de fragments, mais je n'ai pas caché le premier fragment qui servira de domicile.
Réf: https://medium.com/@oluwabukunmi.aluko/bottom-navigation-view-with-fragments-a074bfd08711
la source
Je suis peut-être bien trop tard, mais cela pourrait aider quelqu'un à l'avenir.
Cette réponse est une modification pour
mangu23
répondreJ'ai seulement ajouté une boucle for pour éviter la répétition et pour ajouter facilement plus de fragments sans code standard.
Nous avons d'abord besoin d'une liste des fragments à afficher
Ensuite, nous devons le remplir de nos fragments
Et nous avons besoin d'un moyen de savoir quel fragment a été sélectionné dans la liste, nous avons donc besoin de
getFragmentIndex
fonctionEt enfin, la
displayFragment
méthode aimera ceci:De cette façon, nous pouvons appeler
displayFragment(homeFragment)
par exemple.Cela affichera
HomeFragment
et masquera automatiquement tout autre fragment de la liste.Cette solution vous permet d'ajouter plus de fragments au
fragmentList
sans avoir à répéter lesif
instructions de l'anciennedisplayFragment
version.J'espère que quelqu'un trouvera cela utile.
la source