«

问题:android activity中使用viewpager显示fragment

时间:2024-3-2 16:57     作者:韩俊     分类: Android


在自己的开发项目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创建什么对象?


还请高手可以这些一些问题,纠结啊


标签: android

热门推荐