2017-09-12 7 views
1

Short Story:auditeur ViewPage tiré après la création du fragment

Comment détecter un défilement page ViewPager/modification avant l'exécution du cycle de vie de fragment pour la nouvelle page?

longue histoire:

J'ai un ViewPager avec des fragments attribués à afficher à l'aide ViewPagerAdapter, l'un de ces fragments est destiné à être affiché avec des données différentes selon la page active sélectionnée dans le pager.

par exemple, si la page en cours est sélectionné il afficher A données, et si la page en cours est sélectionné il va afficher B données. La solution directe consiste à définir les données en fonction de la page en cours en utilisant OnPageChangeListener ou SimpleOnPageChangeListener, mais les deux ne sont pas applicables car le cycle de vie du fragment WHOLE est appelé avant l'appel de l'une de ces méthodes auditeurs, de sorte que les données seraient être défini après la création de fragments ici.

la deuxième solution directe est de faire les changements après avoir reçu l'appel des auditeurs qui est si mauvais en ce qui concerne l'expérience de l'utilisateur et la conception sage.

Alors serait le meilleur moyen de définir les informations d'identification des fragments lors du changement de la page en cours de ViewPager avant la méthode onResume() du fragment à exécuter?


Ce que je fais:

dans MyFragment.java:

// it goes here first 
@Override 
public void onResume() { 
    super.onResume(); 
    // check the Data Applied 
    if(dataA) 
     doSomething(); 
    else 
     doSomethingElse(); 
} 

dans MainActivity.java:

pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
      // then it goes here 
      // setting the Data of the fragment 
      if (position == 2) 
       setDataA(); 
      else (position == 4) 
       setDataB(); 
    } 
}); 

Répondre

1

Pourquoi ne pas vous utiliser l'interface de rappel? Si vous définissez l'interface, vous pouvez même obtenir le rappel sur le fragment onAttach() ou où vous voulez.

Exemple Mise en œuvre:

Activité:

public class MyActivity extends AppCompatActivity implements FragmentListener { 

    @Override 
    public void onFragmentSelected(String value) { 
     // set data here. 
    } 

    public interface FragmentListener { 
     void onFragmentSelected(String value); 
    } 
} 

Dans vos viewPager Fragments:

public class MyFragment extends Fragment{ 

     @Override 
     public void onAttach(Context context) { 
      super.onAttach(context); 
      if(context instanceof MyActivity){ 
       ((MyActivity)context).onFragmentSelected("Your_Identification"); 
      } 
     } 
} 

Faites ceci dans tous vos viewPager fragments de sorte que vous obtiendrez quel fragment attaché à partir du segment onAttach() lui-même. Ou choisissez quand il devrait être appelé.

Hope it helps :)

+0

quels seraient les critères d'utiliser, comme je l'ai dit que je besoin de dire lors du défilement d'une nouvelle page du 'ViewPager'. –

+1

attendre. Je mettrai à jour ma réponse –

+0

Voir ma mise à jour. maintenant vous obtiendrez le callback avant le fragment créé. passez votre identification unique pour identifier le fragment attaché. –