如何重新加载/刷新已经显示过一次的片段?
How to reload / refresh fragment that has already been displayed once?
- 我有 2 个
Fragment
:My1stFragment
和 My2ndFragment
。
- 在
My1stFragment
中,我有一个 ListView
由数据库填充。此外,当我点击编辑按钮时,我调用第二个 Fragment
来编辑数据。
- 在第 2 个
Fragment
中,我编辑了我的工资金额并通过单击提交按钮更新了我的数据库,然后返回到 My1stFragment
。
- 问题是当我回到
My1stFragment
时,我的 ListView
没有更新,即使数据库已经更新。
将您的 PagerAdapter
class 导出为
public static class MyPagerAdapter extends FragmentStatePagerAdapter
而不是
public static class MyPagerAdapter extends FragmentPagerAdapter
基本上,FragmentPagerAdapter
将创建的 Fragment
保存在内存中,而 FragmentStatePagerAdapter
在它们移入和移出视图时销毁并重新创建它们。
进一步考虑:
1. 确保您 不是 在任何 Fragment
中呼叫 setRetainInstance(true)
,否则它们不会被刷新/更新。
2. 添加
viewPager.setOffscreenPageLimit(0);
到你的代码。这确保重新创建相邻的 Fragment
。
3. 而不是
Activity -> ViewPager -> Fragments
将结构创建为
Activity -> Fragment -> ViewPager -> Nested Fragments
这将确保每个 Fragment
在页面滑动时刷新。参见 this post 实现。
编辑:
正如下面评论中所讨论的,第 2 点是多余的。所以在这种情况下只有第 1 点和第 3 点实际上有用。
在您的第一个片段中添加以下内容:
@Override
public void setUserVisibleHint(boolean isVisibleToUser){
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
Log.e("Visible hint","in visibleHint ()");
//add your method to set adapter to listview here by passing (getActivity().getApplicationContext()) parameter for context
}
}
现在,当您想从其他片段转到第一个片段时,请使用:
((ActivityOfFragment) getActivity())./*viewPager if any.*/setCurrentItem(0/*fragment position*/, true);
- 我有 2 个
Fragment
:My1stFragment
和My2ndFragment
。 - 在
My1stFragment
中,我有一个ListView
由数据库填充。此外,当我点击编辑按钮时,我调用第二个Fragment
来编辑数据。 - 在第 2 个
Fragment
中,我编辑了我的工资金额并通过单击提交按钮更新了我的数据库,然后返回到My1stFragment
。 - 问题是当我回到
My1stFragment
时,我的ListView
没有更新,即使数据库已经更新。
将您的 PagerAdapter
class 导出为
public static class MyPagerAdapter extends FragmentStatePagerAdapter
而不是
public static class MyPagerAdapter extends FragmentPagerAdapter
基本上,FragmentPagerAdapter
将创建的 Fragment
保存在内存中,而 FragmentStatePagerAdapter
在它们移入和移出视图时销毁并重新创建它们。
进一步考虑:
1. 确保您 不是 在任何 Fragment
中呼叫 setRetainInstance(true)
,否则它们不会被刷新/更新。
2. 添加
viewPager.setOffscreenPageLimit(0);
到你的代码。这确保重新创建相邻的 Fragment
。
3. 而不是
Activity -> ViewPager -> Fragments
将结构创建为
Activity -> Fragment -> ViewPager -> Nested Fragments
这将确保每个 Fragment
在页面滑动时刷新。参见 this post 实现。
编辑:
正如下面评论中所讨论的,第 2 点是多余的。所以在这种情况下只有第 1 点和第 3 点实际上有用。
在您的第一个片段中添加以下内容:
@Override
public void setUserVisibleHint(boolean isVisibleToUser){
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
Log.e("Visible hint","in visibleHint ()");
//add your method to set adapter to listview here by passing (getActivity().getApplicationContext()) parameter for context
}
}
现在,当您想从其他片段转到第一个片段时,请使用:
((ActivityOfFragment) getActivity())./*viewPager if any.*/setCurrentItem(0/*fragment position*/, true);