web-dev-qa-db-fra.com

Comment actualiser le contenu de l'onglet de fragment en cliquant sur le bouton

Je suis vraiment nouveau dans Android et j'implémente un petit projet dans lequel j'ai des nouvelles d'un site Web Drupal. Cette application est avec 3 onglets et chaque onglet a une liste d'articles avec un contenu spécifique. La liste d'articles est créée par des vues de texte et des images vues disposées en linéaire. Lorsque je clique sur le titre, l'article s'ouvre avec des détails. Ces articles sont chargés à partir de Drupal site via HTTP POST et module ViewJSON. Les onglets sont créés avec FragmentActivity et TabHost. Tout va bien et fonctionne bien jusqu'ici.

Mon problème est que je veux faire un bouton d'actualisation, à placer sur les onglets et lorsque j'appuie dessus, la liste des articles doit actualiser ou recharger et garder l'onglet actuel ouvert. J'ai essayé de remplacer le contenu du fragment d'onglet et de le rouvrir, mais lorsque je clique sur le titre d'un article pour l'ouvrir, le contenu de l'onglet reste dans la pile sous tous les fragments. Je mentionne que lorsque je clique sur le titre de l'article, un nouveau fragment s'ouvre. J'ai envoyé un identifiant des articles comme argument et dans le même fragment j'ouvre le contenu de l'article.

J'essayais avec ce code mais sans succès.

Button btn_refresh = (Button) findViewById(R.id.btn_refresh);
        btn_refresh.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                 String current_tab = mTabHost.getCurrentTabTag(); 
                 if(current_tab.contains("POPULARE")){

                     Fragment f;
                     f = new PopulareActivity(); 
                     FragmentTransaction ft =   getSupportFragmentManager().beginTransaction(); 
                     ft.replace(R.id.tot,f);   
                     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
                     ft.commit();
               }
                 if(current_tab.contains("RECOMANDATE")){

                     Fragment f;
                     f = new RecomandateActivity(); 
                     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
                     ft.replace(R.id.tot,f);   
                     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
                     ft.commit(); 
                 } 

Plus précisément, j'entre sur l'application, appuyez sur Tab2 (affiche la liste des articles de tab2), appuyez sur le bouton d'actualisation, ouvrez un article, appuyez sur le bouton de retour de l'appareil mobile et montrez-moi le contenu de tab2. Maintenant, j'entre sur tab1 (et montre la liste des articles de tab1), ouvre un article de la liste de tab1, montre-moi ce dont j'ai besoin et appuie sur le bouton de retour depuis le mobile. En ce moment est affiché le contenu tab2 (la liste des articles forme tab2 d'où j'ai appuyé sur le bouton d'actualisation.).

Pour ouvrir les détails d'un article que j'utilise:

           tv.setOnClickListener(new View.OnClickListener() { 
                    public void onClick(View v) { 

                             Fragment f;
                             f = new DetaliiActivity();
                             Bundle data = new Bundle();  
                             data.putInt("id", nid);
                             f.setArguments(data);
                             FragmentTransaction ft = getFragmentManager().beginTransaction();

                             ft.replace(R.id.tot,f);

                             ft.addToBackStack(null); 
                             ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
                             ft.commit(); 
                    }
                });

Merci d'avance pour votre aide!

10
mr.kosso

Pour actualiser le contenu d'un fragment, vous pouvez conserver une référence au fragment et appeler une méthode publique (par exemple) refresh() dans ce fragment. Exemple:

public class ArticleTabFragmentActivity extends FragmentActivity{
  private PopulareFragment populareFragment;
  private RecomandateFragment recomandateFragment;

  <code>

  private void bindView(){
    Button btn_refresh = (Button) findViewById(R.id.btn_refresh);

    btn_refresh.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                 String current_tab = mTabHost.getCurrentTabTag(); 
                 if(current_tab.contains("POPULARE")){
                   populareFragment.refresh();
                 } else if(current_tab.contains("RECOMANDATE")){
                   recomandateFragment.refresh();
                 } 
    });
  }



}

public class PopulareFragment extends Fragment{  

  public void refresh(){
    <refresh the contents of the fragment>
  }

}

<Same for other fragment>

Maintenant, lorsque vous créez le fragment d'onglet, comme le PupulareFragment, utilisez la variable d'instance pupulareFragment pour stocker le fragment. Il est donc disponible dans le bouton d'actualisation de la méthode onClick.

De cette façon, vous ne remplacez/ne créez aucun nouveau fragment lors de l'actualisation. Donc, revenir à tabActivity après être allé à l'activité des détails de l'article, fonctionnerait probablement aussi bien.

6
NickL