0

J'ai deux problèmes et je me bats pendant quelques jours. Je ne suis pas sûr de ce que la bonne façon est.Android TablaLayout et NavigationDrawer

  1. Je veux combiner une mise en page d'onglet avec un téléavertisseur vue contenant trois fragments (la mise en page d'onglet et le téléavertisseur de vue sont l'écran d'accueil) et un tiroir de navigation. Et je pense que tout ce que vous pouvez naviguer à partir du tiroir devrait être un fragment d'accepter les paramètres ou quelque chose de similaire. Donc, est-ce que je devrais laisser la disposition de tabulation dans la disposition des activités principales ou devrais-je mettre également cette disposition dans un fragment (ainsi voit le pagin avec des fragments à l'intérieur d'un fragment de maison)? Au démarrage de l'application, je vérifie si l'utilisateur est connecté et s'il télécharge des données à partir de Firebase. Je le fais dans un autre fragment (fragment de données) là je fixe setainence à vrai. Donc, actuellement, l'un des fragments de tabulation a besoin des données de Firebase, mais bientôt tous en auront besoin. Comment transmettre les données (listes) du fragment de données aux fragments d'onglets ou au soi-disant fragment d'origine, puis aux onglets. J'ai déjà essayé des interfaces mais je ne sais pas comment gérer les changements de confirmation.

Compte tenu des deux problèmes ou la combinaison des deux comment vous résoudre ce/qui approche de conception est mieux que des fragments d'utilisation ou de laisser l'écran d'accueil à l'intérieur de l'activité principale et modifier l'affichage lorsque l'utilisateur navigue du tiroir fragmenter?

PS. Je vais ajouter du code dès que possible. Merci.

Répondre

0

TabLayout et ViewPager doivent être dans la disposition Activité, car cela a plus de sens, car l'activité gère les fragments. En outre, le tiroir de navigation doit naviguer dans Activités et Activités entre les fragments. Encore une fois, c'est la chose logique pour une organisation de code décent, et il empêche les répétitions dans la mise en page (AKA plus d'un bouton pour naviguer vers le même fragment).

Pour le problème Firebase, je vous suggère de démarrer l'appel dans l'activité, puis d'appeler une fonction dans tous les fragments avec les informations récupérées. Quelque chose comme ceci:

new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(MyFragment f : mFragmentList) 
      f.addData(dataSnapshot); 
    } 
} 

Si vous voulez vraiment le Fragment de faire l'appel à Firebase, vous pouvez alors créer votre propre liste d'événements et d'écoute.

public class SnapshotRetrievedEvent { 
    private static List<SnapshotRetrievedListener> listeners = new ArrayList<>(); 

    public static void addListener(SnapshotRetrievedListener listener){ 
     listeners.add(listener); 
    } 

    public static void notify(DataSnapshot snapshot) { 
     for(SnapshotRetrievedListener listener : listeners) 
      listener.onSnapshotRetrived(snapshot); 
    } 
} 

public interface SnapshotRetrievedListene { 
    void onSnapshotRetrieved(DataSnapshot snapshot); 
} 

Puis dans votre Fragment attendant l'instantané, vous ajoutez l'auditeur comme ceci:

SnapshotRetrievedEvent.addListener(
    new SnapshotRetrievedListener(){ 
     @Override 
     public void onSnapshotRetrieved(DataSnapshot snapshot){ 
      // Do stuff 
     } 
    } 
); 

onSnapshotRetrieved sera appelée lorsque vous appelez SnapshotRetrievedEvent.notify(snapshot) dans l'autre fragment. J'espère que cela vous aidera

+0

Je pensais que vous deviez utiliser des fragments avec un tiroir de navigation pour avoir un UX fluide? –

+0

Cela semble effectivement populaire. Je pense que cela dépend de l'application elle-même et de ce que vous voulez en faire. Je pense toujours que le ViewPager avec TabLayout devrait être exclusif au tiroir de navigation puisque le TabLayout est là particulièrement pour la navigation. – Sunshinator