在 ViewPager 中刷新 Fragment 视图
Posted
技术标签:
【中文标题】在 ViewPager 中刷新 Fragment 视图【英文标题】:Refresh Fragment view in ViewPager 【发布时间】:2016-08-31 18:36:58 【问题描述】:在我的应用程序中,viewPager 中有 3 个片段。
对于第一个片段,我想在按下按钮后重新加载视图(基本上再次调用onCreateView()
)。
为了获得这个功能,我决定使用FragmentTransaction
、detach()
、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 个唯一字符串 TAG1
、TAG2
、TAG3
,然后使用其唯一标签添加每个片段
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+TabLayout+Fragment刷新Fragment中的数据
无法从 ViewPager 中的另一个片段刷新/更新片段中的列表视图
如何以编程方式通过 Main Activity 在 ViewPager 中更新刷新片段