2014-07-16 5 views
1

J'ai un Activity avec quatre boutons en bas comme onglets. En appuyant sur n'importe quel bouton, un nouveau Fragment est affiché dans le FrameLayout au-dessus de ces boutons, comme nous le faisons dans TabActivity. Voir mon problème here. Maintenant, je pense que je devrais trouver un moyen de cacher et de montrer ces fragments. Veuillez me dire comment puis-je montrer et cacher un fragment sans le recharger à nouveau. Le but principal de montrer cachant un fragment est de maintenir son état actuel. Dans l'un de mes fragments, j'ai un AsyncTask chaque fois que je passe d'un fragment à l'autre, je l'appelle à nouveau AsynTask.comment masquer un fragment?

Répondre

2

// pour montrer fragment quand il est caché

FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction() 
      .show(fragment1) 
      .commit(); 

// pour masquer le fragment

FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction() 
      .hide(fragment1) 
      .commit(); 
+0

MERCI POUR LE CODE +10 – Nepster

1

vous ne pouvez pas passer par une vue comme

4 frameLayout déclare

private FrameLayout fragment1; 
private FrameLayout fragment2; 
private FrameLayout fragment3; 
private FrameLayout fragment4; 

et

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.fragment1, Fragment1.newInstance()); 
ft.replace(R.id.fragment2, Fragment2.newInstance()); 
ft.replace(R.id.fragment3, Fragment3.newInstance()); 
ft.replace(R.id.fragment4, Fragment4.newInstance()); 
ft.commit(); 

et jouer avec visible ou disparu? comme

fragment1.setVisibility(View.Visible); 
fragment2.setVisibility(View.gone); 
fragment3.setVisibility(View.gone); 
fragment4.setVisibility(View.gone); 

et par la manière: fonctionne pour moi -> Activité public class étend ActionBarActivity {

private FrameLayout fragment1; 
private FrameLayout fragment2; 

private Button bt1; 
private Button bt2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.frg_test_frg); 

    fragment1 = (FrameLayout) findViewById(R.id.fragment1); 
    fragment2 = (FrameLayout) findViewById(R.id.fragment2); 

    bt1 = (Button) findViewById(R.id.button); 
    bt2 = (Button) findViewById(R.id.button2); 

    bt1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      fragment1.setVisibility(View.VISIBLE); 
      fragment2.setVisibility(View.GONE); 
     } 
    }); 

    bt2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      fragment1.setVisibility(View.GONE); 
      fragment2.setVisibility(View.VISIBLE); 
     } 
    }); 

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment1, new Fragment1()); 
    ft.replace(R.id.fragment2, new Fragment2()); 
    ft.commit(); 
} 
+0

fragments ne sont pas des vues. Ils sont object.setVisiblity n'est pas une manière valide Lire la question liée http://stackoverflow.com/questions/24774631/asynctask-is-re-executing-while-switching-between-fragments – Nepster

+0

oui, mais framelayout sont vue. vous pouvez jouer directement avec cette vue – u53r

+0

je n'ai qu'un frameLayout dans le xml. que je veux remplacer par d'autres comme nous le faisons dans TabActivity. Et remplacez deux travaillent ensemble supprimer et ajouter. Je veux dire REMPLACER == (SUPPRIMER FRAGMENT ACTUEL + AJOUTER UN AUTRE FRAGMENT) – Nepster

Questions connexes