在 ViewPager 中刷新 Fragment 视图

Posted

技术标签:

【中文标题】在 ViewPager 中刷新 Fragment 视图【英文标题】:Refresh Fragment view in ViewPager 【发布时间】:2016-08-31 18:36:58 【问题描述】:

在我的应用程序中,viewPager 中有 3 个片段。 对于第一个片段,我想在按下按钮后重新加载视图(基本上再次调用onCreateView())。

为了获得这个功能,我决定使用FragmentTransactiondetach()attach()commit() 片段。

在片段中我创建了SetData() 方法:

public void setData() 
    Fragment frg = null;
    frg = mainMenu.getFragmentByPosition();
    final android.support.v4.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.detach(frg);
    ft.attach(frg);
    ft.commit();

在拥有 viewPager 的活动中,我有 getFragmentByPosition() 方法:

public Fragment getFragmentByPosition() 
    String tag = "android:switcher:" + R.id.viewpager + ":" + viewPager.getCurrentItem();
    return getSupportFragmentManager().findFragmentByTag(tag);

问题是我在getFragmentByPosition() 中得到 NullPointerException

更新

问题是我无法获得对当前显示片段的引用。

adapter.getItem(1) - 返回null

getFragmentManager().getFragments().get(0) - 返回null

【问题讨论】:

你试过adapter.notifyDataSetChanged(); 【参考方案1】:

如果您有 3 个片段,请创建 3 个唯一字符串 TAG1TAG2TAG3,然后使用其唯一标签添加每个片段

getSupportFragmentManager().beginTransaction().add(R.id.mycontainer, new MyFragment1(), TAG1).commit();

然后使用相同的标签查找

getSupportFragmentManager().findFragmentByTag(TAG1);

【讨论】:

片段在 FragmentPagerAdapter 中是否也可以这样工作? FragmentPagerAdapter 给出给定位置的片段。 getItem(1) 将始终返回您的第一个片段, getItem(2) 第二个等。根本没有标签。 问题是adapter.getItem(1)也有NullPointerException。 好的,目前 NullPointerException 在 SetData() 方法中(我已经更改了之前的代码) - getFragmentManager().beginTransaction().detach(frag).attach(frag).commit(); frag 是从 adapter.getItem(1) 传递的片段。

以上是关于在 ViewPager 中刷新 Fragment 视图的主要内容,如果未能解决你的问题,请参考以下文章

解决ViewPager缓存导致不能实时刷新数据

ViewPager+TabLayout+Fragment刷新Fragment中的数据

无法从 ViewPager 中的另一个片段刷新/更新片段中的列表视图

如何以编程方式通过 Main Activity 在 ViewPager 中更新刷新片段

Android Fragment + ViewPager的懒加载实现

Android Fragment + ViewPager的懒加载实现