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

Ram*_*ala 5 android android-listview android-fragments android-viewpager android-sqlite

在此输入图像描述

  • 我有2 Fragment秒:My1stFragmentMy2ndFragment.
  • My1stFragment我有一个ListView由数据库填充的内部.此外,当我点击编辑按钮时,我调用第二个Fragment来编辑数据.
  • 在第二个Fragment我编辑我的工资金额并通过点击提交按钮更新我的数据库并返回My1stFragment.
  • 问题是,当我回来时,即使数据库已更新My1stFragment,我ListView也没有更新.

Dan*_*alo 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
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当您想要从其他片段中获取第一个片段时,请使用:

((ActivityOfFragment) getActivity())./*viewPager if any.*/setCurrentItem(0/*fragment position*/, true);
Run Code Online (Sandbox Code Playgroud)


Y.S*_*Y.S 2

将您的PagerAdapter班级派生为

public static class MyPagerAdapter extends FragmentStatePagerAdapter
Run Code Online (Sandbox Code Playgroud)

代替

public static class MyPagerAdapter extends FragmentPagerAdapter
Run Code Online (Sandbox Code Playgroud)

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

进一步考虑:

1.确保您没有调用任何setRetainInstance(true)s Fragment,否则它们将不会被刷新/更新。

2.添加

viewPager.setOffscreenPageLimit(0);
Run Code Online (Sandbox Code Playgroud)

到你的代码。这确保了相邻的Fragments 被重新创建。

3.代替

Activity -> ViewPager -> Fragments
Run Code Online (Sandbox Code Playgroud)

创建结构为

Activity -> Fragment -> ViewPager -> Nested Fragments
Run Code Online (Sandbox Code Playgroud)

这将确保每个页面都Fragment在页面滑动时刷新。请参阅这篇文章了解实施情况。

编辑:

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