我有一个ViewPager和一个FragmentStatePager,它附加了大约8个片段。该应用程序设计为向导。用户将一页上的信息输入到下一页,依此类推。现在我在收集信息和恢复信息时遇到问题。当用户向前滑动时,如何保存我的信息,同样当我回过头来调用哪些函数时,我可以从我的对象中读取数据并填充屏幕UI?我尝试过OnSaveInstanceState,但几乎没有调用过。 OnResume有时被称为有时没有。另请注意,我正在使用RoboGuice将视图注入到我的片段中,因此ui字段仅在OnViewCreated函数之后可用。还要注意我的八个片段中的每一个都实现了以下接口。在这两个函数中,应用程序级别的singelton要么被读取,要么读取和访问Fragment中的UI字段。我只是找不到将这些功能插入的地方?任何建议都会有很大用处。我会讨论setOnPageChangeListener但是在实际页面对用户可见之前调用onPageSelected事件并且可能导致空指针异常,因为我的RoboGuice注入并没有真正准备好。
public interface FragmentState {
public void saveFragementState();
public void restoreFragementState();
}
答案 0 :(得分:0)
您应该使用ViewPager.setOffscreenPageLimit(k)
将ViewPager的所有片段从n-k缓存到n + k。
然后您可以安全地使用onPageSelected()
:
pager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {
}
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
public void onPageSelected(int position) {
fragments.get(position).doThings();
}
});