如何重新加载/刷新已经显示过一次的片段?

时间:2015-04-03 10:02:33

标签: android android-fragments android-listview android-viewpager android-sqlite

enter image description here

  • 我有2 Fragment s:My1stFragmentMy2ndFragment
  • My1stFragment内,我有一个ListView,由数据库填充。此外,当我点击编辑按钮时,我会拨打第二个Fragment来编辑数据。
  • 在第二个Fragment中,我通过点击提交按钮编辑我的工资金额并更新我的数据库,然后返回My1stFragment
  • 问题是,当我回到My1stFragment时,即使数据库已更新,我的ListView也未更新。

2 个答案:

答案 0 :(得分:5)

在firstFragment中添加以下内容:

@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);

答案 1 :(得分:2)

将您的PagerAdapter课程视为

public static class MyPagerAdapter extends FragmentStatePagerAdapter

而不是

public static class MyPagerAdapter extends FragmentPagerAdapter

基本上,FragmentPagerAdapter会将创建的Fragment保留在内存中,而FragmentStatePagerAdapter会在移入和移出视图时重新销毁并创建它们。

进一步考虑因素:

1。确保您在任何setRetainInstance(true)中呼叫Fragment,否则将无法刷新/更新

2。添加

viewPager.setOffscreenPageLimit(0);

代码。这可以确保重新创建相邻的Fragment

3。而不是

Activity -> ViewPager -> Fragments

将结构创建为

Activity -> Fragment -> ViewPager -> Nested Fragments

这将确保在页面滑动时刷新每个Fragment。有关实施,请参阅this post

修改

如下面的评论所述,第2点是多余的。所以在这种情况下,只有第1点和第3点实际上是有用的。