我在查看选项卡中的片段不刷新

Bla*_*ire 9 android fragment android-viewpager

我有一个带有4个标签的viewpager ..在每个标签中都有一个片段.我的第一个选项卡是带有表单的片段(例如用户),在我单击保存后,数据将插入到数据库中.我的第二个选项卡是另一个带有表单的片段,但它使用第一个选项卡中的数据(我从数据库中获取它)来填充微调器.现在,在我从第一个选项卡成功插入数据后,在我的第二个选项卡中,微调器是空的.因为我的db查询是在第二个片段中的onCreateView()中实现的,所以在应用程序启动时只调用一次,因此在tab 1 i tab2之间的更改不会在onCreateView()甚至onResume()上启动.对我来说有趣的是,如果我转到tab4然后返回到tab2,我的数据正好在我的微调器中,所以不知何故从我当前的选项卡中刷出两个选项卡来刷新我的片段.我的问题是,当onCreateView()只调用一次时,如何才能对我的片段进行适当的刷新?

编辑 我试图把那个方法psykhi建议像这样:

    this.mViewPager.setOffscreenPageLimit(0);
    this.mViewPager.setAdapter(this.mPagerAdapter);
    this.mViewPager.setOnPageChangeListener(this);
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用.我错过了什么吗?

M-W*_*eEh 13

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


删除此答案的内容,因为这是访问Fragment内部的一种非常糟糕的方式ViewPager,请参阅上面的链接以获得更好的方法.

  • `setOffscreenPageLimit()`的默认值为1.这意味着当前选项卡每侧的1将被初始化/缓存.当您离开2个选项卡时,相关选项卡将被缓存/销毁.所以回来会再次启动它,这次一切都会好起来的. (2认同)

Dav*_*ave 11

我发现模拟"setOffscreenPageLimit(0)"行为的最好方法是使用OnPageChangeListener并覆盖适配器中的getItemPosition方法.像这样的东西:

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

@Override
public int getItemPosition(Object object) {
     return POSITION_NONE;
}
Run Code Online (Sandbox Code Playgroud)

然后在包含ViewPager的Activity中:

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

这应该与将OffscreenPageLimit设置为0具有相同的效果.但是,此功能与ViewPager旨在提供的功能相悖.如果您尝试以这种方式实现ViewPager,可能需要重新评估您的布局,以确保ViewPager确实是您想要使用的.