2013-04-27 4 views
1

J'ai une activité avec différents fragments dans la sélection de l'onglet, je souhaite remplacer le bouton de retour afin qu'il appelle une méthode dans le fragment qui met à jour la liste dans la liste des dossiers parents. Pour l'instant, j'ai fait cela dans l'activité principale:bouton de remplacement dans le fragment

@Override 
     public void onBackPressed() 
     { 
      ActionBar actionbar = getActionBar(); 
      if(actionbar.getSelectedTab().getPosition() == 0) 
      { 
       if(!fla.onBackPressed()) 
        super.onBackPressed(); 
      } 
     } 

Et ce dans le fragment:

public boolean onBackPressed() 
    { 
     if(back_str.equals(MAIN_POINT)){ 
      Log.v("A", "BACK FIRST" + back_str); 
      return false; 
      } 
     else 
     { 
      Log.v("A", "BACK PREMUTO"); 
      updateListViewFolder(back_str); 
      return true; //torna indietro nella view 
     } 
    } 

back_str est une chaîne globale dans la classe faisant référence au répertoire parent en cours dans le listview et il est mis à jour chaque fois que j'ouvre un dossier.

semble que lorsque j'appuie sur le bouton de retour back_str est toujours = null

quelqu'un peut me aider et dites-moi une manière que je peux résoudre ce problème?

EDIT:

Je vais essayer de me expliquer mieux, j'ai un listview à l'intérieur du fragment que j'utiliser pour naviguer dans le dossier du téléphone, à partir de/stockage/quand je presse un dossier, il ouvre la mise à jour du listview appelant cette méthode:

public void updateListViewFolder(String newPath) 
{ 
    ArrayList<Song> songsListTMP = new SongManager().getPlayList(newPath); //aggiungo tutte le canzoni 
    songsListData.removeAll(songsListData); 

    //AGGIUNGO LA CARTELLA PRECEDENTE 
    File here = new File(newPath); 
    back_str = here.getParent(); 
    Log.v("A", "S:"+back_str); 
    Song back = new Song(back_str, true); //Sono directory 
    songsListData.add(back); 

    for(int i = 0; i < songsListTMP.size(); i++) 
    { 
     Song song = songsListTMP.get(i); 
     songsListData.add(song); //tengo un attimo separate 
    } 

     for(File dir : here.listFiles()) 
     { 
      if(dir.isDirectory() && dir.canRead()){ 
       Song sdir = new Song(dir.getPath(), true); //Sono directory 
       songsListData.add(sdir); 
      } 
     } 

    getListView().invalidateViews(); 

    } 

maintenant, je veux revenir au dossier parent si le bouton de retour est sélectionné, mais en quelque sorte j'obtiens des erreurs lorsque je tente d'appeler la méthode onBackPressed du fragment de l'activité . J'utilise une variable statique string_str pour stocker dans mon fragment le chemin du dossier parent avec lequel je veux mettre à jour la liste, mais je ne peux pas mettre la liste à jour avec la même méthode updateListViewFolder

+0

Comment est back_str initialisés? –

+0

En fonction de la quantité d'informations que vous avez fournie, si vous transmettez back_str en paramètre à une fonction pour la modifier, cela ne fonctionnera pas dans java. Utilisez une méthode void publique pour définir la valeur à la place. – Neoh

+0

back_str est initialisé en tant que variable globale et est égal à "/ storage /". Le problème n'est toujours pas de savoir comment je passe la variable car la clause else n'est jamais appelée. D'une certaine manière dans l'activité quand j'appelle la méthode du fragment (onBackPressed) il retourne toujours "/ storage /" au lieu d'un autre chemin puisque back_str devrait être modifié quand j'ouvre un autre dossier – Pievis

Répondre

1

Ok trouvé l'erreur. Je n'appelais pas la méthode de l'instance du fragment dans l'onglet de la barre d'action, j'appelais simplement la méthode de cette classe. J'ai fait mon MyTabListener de classe pour définir une étiquette à mon fragment pour que je puisse accéder à avec (FolderListActivity) getFragmentManager().findFragmentByTag("F1");

Voici la classe:

class MyTabListener implements ActionBar.TabListener { 
    private Fragment mFragment; 

    public MyTabListener(Fragment fragment) { 
     mFragment = fragment; 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     if(mFragment instanceof FolderListActivity) 
      ft.add(mFragment, "F1"); //mi occupo di settare un tag per recuperare la specifica istanza del fragment 
     else 
      ft.add(mFragment, "F0"); 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     FolderListActivity f1 = (FolderListActivity) getFragmentManager().findFragmentByTag("F1"); //accedo allo specifico fragment 
     if(f1 != null) 
      f1.cleanView(); 
     ft.remove(mFragment); 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // do nothing 
    } 
} 
Questions connexes