在自己的开发项目DNF新闻中,在主页面的MainActivity extends FragmentActivity,其中,在activity中创建viewpager,并创建对应的Fragment。
代码如下:
public void initViewPager(Bundle savedInstanceState){ <span style="white-space:pre"> </span><pre name="code" class="java"><span style="white-space:pre"> </span>viewPager = (ViewPager)findViewById(R.id.viewpager); list = new ArrayList<Fragment>(); activesFragment = new ActivesFragment(); newsFragment = new NewsFragment(); noticeFragment = new NoticeFragment();list.add(newsFragment); list.add(noticeFragment); list.add(activesFragment);}
//向Fragment中添加我们从网路上获得数据:
activesFragment.setTexts(hd.get("linkText"));
activesFragment.setHrefs(hd.get("linkHref"));
newsFragment.setTexts(xw.get("linkText"));
newsFragment.setHrefs(xw.get("linkHref"));
noticeFragment.setTexts(gg.get("linkText"));
noticeFragment.setHrefs(gg.get("linkHref"));
//为viewPager设置适配器
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(),list));A: viewPager.setCurrentItem(0);
viewPager.setOnPageChangeListener(MainActivity.this);
但是在横竖屏切换的过程中发现,initViewPager中的代码会执行创建三个Fragment,并且系统也会自动的调用这三个Fragment的无参数构造方法创建三个对象添加进ViewPager中,并且我们自己创建的Fragment并没有被显示出来,onCreateView方法也没有被执行。
所以这导致我们在横竖屏切换的时候,viewPager显示的是由系统创建的Fragment。但是系统创建的Fragment并没有我们需要传递的数据,导致横竖屏切换后,ViewPager中的Fragment中的listView没有数据显示。
自己的解决方案:
Fragment中onSaveInstanceState保存数据,onCreateView中恢复数据。
Activity中保存数据,恢复中不在执行网络请求下载数据。(实际此时保存的数据也没用,并没有传递给系统创建的Fragment)
总结:
View及Activity在横竖屏切换时会保存自己的状态,可以恢复自己先前的状态。
ViewPager保存了当前选中的Item的位置,恢复的时候会设置当前的item。(感觉A处的代码没有生效,未知原因)
疑问:
View和Activity会保存自己的哪些状态?(View点击listener没有保存)
有哪些控件系统会为我们创建?
系统为什么知道给ViewPager创建什么对象?
还请高手可以这些一些问题,纠结啊