我得到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);
但它不是为我工作。 我这么想吗?
更新:有一个更好的办法,请看看这里动态更新ViewPager?
删除这个答案的内容,因为这是一个非常糟糕的方式来访问Fragment
的内线ViewPager
,请参见上面的链接,更好的办法。
我发现来模拟“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真的是你想要使用。
这是因为你可以指定片段您viewpager将“保持RAM”的数量( setOffScreenPageLimit ():我觉得默认为1)。 所以,你的第二个片段没有在重新加载。 而当你去一个片3或4,那么你的2个创举片段被删除,那么当你回来重建。
要刷新您的片段,有许多方法来做到这一点:你可以实现你自己的监听器接口在它告诉它什么时候刷新,或直接致电你会实现更新您的内容的方法。
在该片段中的方法第一个覆盖
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){
actionView();//call the method to be refreshed
}
else{
//no
}
}
根据我的经验,ViewPagers保持:
所以,当你1和2之间切换,没有什么是引擎盖下发生 - 就好像他们只是被隐藏/显示。
但是,当你浏览到标签4,标签1&2被破坏(的onDestroy()调用),所以当你导航回其中一方,他们正在重新创建新的(的onCreate()调用)。
作为psykhi建议,你可以setOffScreenPageLimit()为0,使每个片段创建的每个你找到它的时间。
如果你有兴趣在保持在内存中的其他页面的性能的目的, 因为它们在设计时这一点 ,你可以使用一个消息/事件发布系统从标签1发送消息给标签2,告诉它,当您提交更新上标签1的形式。
好吧可能是一个迟到的答复,可能会帮助别人的未来,所以最近我面临同样的问题,同时从数据库中提取数据到它仅用于显示选项卡,一旦我点击第三个标签上。我试过上述方案,但没有真正的工作.. fianlly我碰到奥托这个库可以让你您的应用程序内进行通信..
只要使用这个库yourAdapter.notifyDataSetChanged()无论你从数据库中提取数据..
这部影片帮助我很多https://www.youtube.com/watch?v=lVqBmGK3VuA