ViewPager est Fragment, FragmentPagerAdapter est généralement utilisé comme adaptateur, et cette classe ajoutera une balise lors de l'ajout de Fragment Voir la méthode FragmentPagerAdapterinstantiateItem() dans la source. code de
Cette balise est obtenue via une méthode privée de makeFragmentName(), mais il vous suffit de copier cette méthode directement. Le paramètre viewId de cette méthode doit être l'identifiant de ViewPager, et l'itemId est la méthode getItemId(). de l'adaptateur. Vous pouvez donc assembler l'étiquette vous-même et obtenir le fragment. C'est tout.
Je réfléchis également à ce problème depuis un moment, et après avoir cherché, je n'ai pas trouvé de bonne solution. Le pagerfragmentadapter ne semble pas fournir d'API pour obtenir le fragment correspondant. J'ai créé une liste de références faibles dans l'index et je l'ai ajoutée à l'adaptateur lors de l'initialisation du fragment, puis j'ai réécrit le onDestroyItem de l'adaptateur (probablement appelé ainsi ? Je ne me souviens plus) pour supprimer l'entrée correspondante dans la liste ici. Vous pouvez l'utiliser comme vous le souhaitez après avoir obtenu l'instance de fragment.
Lorsque le Fragment est au premier plan, vous pouvez utiliser LocalBroadcastManager / EventBus / otto / Rx pour vous abonner à un événement (message)
Lorsque le fragment passe en arrière-plan, annulez l'abonnement. Lorsque le fragment passe à nouveau au premier plan, actualisez les données de la page et réabonnez-vous
Lorsque l'élément de
ViewPager
estFragment
,FragmentPagerAdapter
est généralement utilisé comme adaptateur, et cette classe ajoutera une balise lors de l'ajout deFragment
Voir la méthodeFragmentPagerAdapter
instantiateItem()
dans la source. code deCette balise est obtenue via une méthode privée de
makeFragmentName()
, mais il vous suffit de copier cette méthode directement. Le paramètre viewId de cette méthode doit être l'identifiant deViewPager
, et l'itemId est la méthodegetItemId()
. de l'adaptateur. Vous pouvez donc assembler l'étiquette vous-même et obtenir le fragment.C'est tout.
Si vous utilisez RecyclerView, vous pouvez utiliser Eventbus comme ceci
Je réfléchis également à ce problème depuis un moment, et après avoir cherché, je n'ai pas trouvé de bonne solution. Le pagerfragmentadapter ne semble pas fournir d'API pour obtenir le fragment correspondant.
J'ai créé une liste de références faibles dans l'index et je l'ai ajoutée à l'adaptateur lors de l'initialisation du fragment, puis j'ai réécrit le onDestroyItem de l'adaptateur (probablement appelé ainsi ? Je ne me souviens plus) pour supprimer l'entrée correspondante dans la liste ici.
Vous pouvez l'utiliser comme vous le souhaitez après avoir obtenu l'instance de fragment.
Lorsque le Fragment est au premier plan, vous pouvez utiliser LocalBroadcastManager / EventBus / otto / Rx pour vous abonner à un événement (message)
Lorsque le fragment passe en arrière-plan, annulez l'abonnement. Lorsque le fragment passe à nouveau au premier plan, actualisez les données de la page et réabonnez-vous