我在viewpager标签片段不刷新(My fragments in viewpager tab d

2019-07-19 15:20发布

我得到viewpager与4个标签..在每个标签有一个片段。 我的第一个标签是具有形式(例如用户)i点击保存之后,该数据被插入到数据库中的片段。 我的第二个选项卡是另一种形式的片段,但它从第一个选项卡(我是从数据库中获取它)使用数据来填充微调。 现在经过我成功地从我的第一个选项卡插入的数据,在我的第二个选项卡中的微调是空的。 因为我的数据库查询在onCreateView实现()的第二个片段,其被称为只有当应用程序再次起动,标签1我TAB2之间,变化不启动onCreateView(),甚至的onResume()。 对我来说,有趣的是,如果我去TAB4,然后返回到TAB2,我的数据是在我的微调正确,所以在某种程度上刷卡两个卡口离我当前选项卡刷新我的片段。 我的问题是如何能够做到正确刷新到我的片段时onCreateView()被调用一次?

编辑我试图把这个方法psykhi提出这样的:

    this.mViewPager.setOffscreenPageLimit(0);
    this.mViewPager.setAdapter(this.mPagerAdapter);
    this.mViewPager.setOnPageChangeListener(this);

但它不是为我工作。 我这么想吗?

Answer 1:

更新:有一个更好的办法,请看看这里动态更新ViewPager?


删除这个答案的内容,因为这是一个非常糟糕的方式来访问Fragment的内线ViewPager ,请参见上面的链接,更好的办法。



Answer 2:

我发现来模拟“setOffscreenPageLimit(0)”的行为最好的办法是通过结合使用OnPageChangeListener与适配器重写getItemPosition方法。 事情是这样的:

在您的自定义传呼机适配器:

@Override
public int getItemPosition(Object object) {
     return POSITION_NONE;
}

然后在含有ViewPager你的活动:

final MyPagerAdapter adapter = new MyPagerAdapter();
pager.setAdapter(adapter);
pager.setOnPageChangeListener(new OnPageChangeListener() {
     @Override
     public void onPageSelected(int position) {
          ... anything you may need to do to handle pager state ...
          adapter.notifyDataSetChanged(); //this line will force all pages to be loaded fresh when changing between fragments
     }
}

这应该有同样的效果作为OffscreenPageLimit设置为0。但是,此功能是有点反对什么的ViewPager旨在提供。 如果你想实现这样一个ViewPager,它可能是值得重新评估你的布局,以确保一个ViewPager真的是你想要使用。



Answer 3:

这是因为你可以指定片段您viewpager将“保持RAM”的数量( setOffScreenPageLimit ():我觉得默认为1)。 所以,你的第二个片段没有在重新加载。 而当你去一个片3或4,那么你的2个创举片段被删除,那么当你回来重建。

要刷新您的片段,有许多方法来做到这一点:你可以实现你自己的监听器接口在它告诉它什么时候刷新,或直接致电你会实现更新您的内容的方法。



Answer 4:

在该片段中的方法第一个覆盖

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser){
        actionView();//call the method to be refreshed
    }
    else{
        //no
    }

}


Answer 5:

根据我的经验,ViewPagers保持:

  • 您当前的标签
  • &1个标签无论是在存储器侧

所以,当你1和2之间切换,没有什么是引擎盖下发生 - 就好像他们只是被隐藏/显示。

但是,当你浏览到标签4,标签1&2被破坏(的onDestroy()调用),所以当你导航回其中一方,他们正在重新创建新的(的onCreate()调用)。

作为psykhi建议,你可以setOffScreenPageLimit()为0,使每个片段创建的每个你找到它的时间。

如果你有兴趣在保持在内存中的其他页面的性能的目的, 因为它们在设计时这一点 ,你可以使用一个消息/事件发布系统从标签1发送消息给标签2,告诉它,当您提交更新上标签1的形式。



Answer 6:

好吧可能是一个迟到的答复,可能会帮助别人的未来,所以最近我面临同样的问题,同时从数据库中提取数据到它仅用于显示选项卡,一旦我点击第三个标签上。我试过上述方案,但没有真正的工作.. fianlly我碰到奥托这个库可以让你您的应用程序内进行通信..

只要使用这个库yourAdapter.notifyDataSetChanged()无论你从数据库中提取数据..

这部影片帮助我很多https://www.youtube.com/watch?v=lVqBmGK3VuA



文章来源: My fragments in viewpager tab dont refresh