android - ViewPager+Fragment,某个Fragment里面的一条数据发生变化,如何局部刷新这条数据
高洛峰
高洛峰 2017-04-17 17:42:05
0
4
723

ViewPager+Fragment,某个Fragment里面的一条数据发生变化,如何局部刷新这条数据

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(4)
巴扎黑

Lorsque l'élément de

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 FragmentPagerAdapter instantiateItem() dans la source. code de

@Override
public Object instantiateItem(ViewGroup container, int position) {
    // 省略
    if (fragment != null) {
        // 省略
    } else {
        // 省略部分代码
        // 下面这句就是添加Fragment的语句, 第三个参数就是指定Fragment的tag, 
        // 你可以利用这个tag获取到对应的Fragment实例, 有了实例就可以随意更新Fragment的视图了
        mCurTransaction.add(container.getId(), fragment,
                makeFragmentName(container.getId(), itemId));
    }
    // 省略
    return fragment;
}

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.

左手右手慢动作

Si vous utilisez RecyclerView, vous pouvez utiliser Eventbus comme ceci

mAdapter.getItem(event.position).setCommentCount(mAdapter.getItem(event.position).getCommentCount()+1);
mAdapter.notifyItemChanged(event.position);
左手右手慢动作

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.

Peter_Zhu
  1. Lorsque le Fragment est au premier plan, vous pouvez utiliser LocalBroadcastManager / EventBus / otto / Rx pour vous abonner à un événement (message)

  2. 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

  3. .
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal