编辑:我发现Activity正在保存实例,但Fragments保存的数据并没有使它保存到Activity savedInstanceState.我将当前时间保存在outState中,但它没有一路向上,因为活动在其SavedInstanceState中没有任何内容,并且如果我将其打印到logcat,则返回'null'. ..
我正在构建一个内置了countup和countdown计时器的应用程序.计时器的基本托管活动是FragmentActivity,它托管一个FragementPagerAdapter,它在代码中膨胀两个片段(我没有给XML中的片段提供id因为它们没有被定义为.xml中的片段.一切都很有效,直到方向改变,然后活动看起来像是失去了与旧片段的联系,只是选择创建新的片段.这意味着任何当前倒计时都会丢失,并且在配置更改时也会丢失所选择的任何时间.我需要保持计数(如果它开始)和当前显示的任何数字....
我知道适配器应该自己处理这些事情,我在OnCreate和OnCreateView中都设置了SetRetainInstance(true).
我把碎片放入Fragment代码,让我知道每当saveInstanceState为非null时,至少我知道发生了什么,但似乎实例总是为NULL,并且它从头开始创建...总是.
其他一些解决方案让我重写了instantiateItem,但似乎它仅用于重置回调,其他人更改Manifest中的设置(不赞成)....其他解决方案对我来说就像我有事情设置正确..但很明显,我在路上搞砸了一些东西.我只是为FragmentActivity,FragementPagerAdapter和一些片段代码提供代码,因为我不想使用可能不是问题的代码来垃圾邮件.
FragmentActivity
public class Timer_Main extends FragmentActivity {
ViewPager pager;
Timer_Pager mAdapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timer_pager);
mAdapter = new Timer_Pager(this, getSupportFragmentManager());
pager = (ViewPager) findViewById(R.id.timer_pager_display);
pager.setAdapter(mAdapter);
}
public static String getTitle(Context ctxt, int position) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("pageItem", pager.getCurrentItem());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
}
Run Code Online (Sandbox Code Playgroud)
FragementPagerAdapter
public class Timer_Pager extends FragmentPagerAdapter{
Context ctxt = …Run Code Online (Sandbox Code Playgroud) android android-fragments android-fragmentactivity android-pageradapter