更改屏幕旋转时ViewPager片段消失 [英] ViewPager fragments disappear when change screen rotation

查看:183
本文介绍了更改屏幕旋转时ViewPager片段消失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发包含 ViewPager 的安卓应用程序,其中包含 Fragment s,如下所示:

I'm working on android application that contains ViewPager with Fragments, like this:

MainActivity MainActivityFragment screenSlideViewPager Fragment s))),这意味着:

MainActivity(MainActivityFragment(screenSlideViewPager(Fragments))), which means:

活动 包含 片段 包含 ViewPager 包含 片段 s

现在我的问题是旋转设备或更改屏幕旋转ViewPager中的所有片段都会消失。

Now my problem is when rotate device or change screen rotation all Fragments in ViewPager are disappear.

解决此问题的任何想法?

any ideas to solve this issue?

编辑1

MainActivity.java:

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getSupportFragmentManager().findFragmentByTag(TAG) == null) {
        final FragmentTransaction ft = getSupportFragmentManager()
                .beginTransaction();
        ft.add(android.R.id.content, new MainActivityFragment(), TAG);
        ft.commit();
    }
}

MainActivityFragment.java:

MainActivityFragment.java:

public class MainActivityFragment extends Fragment {
    private ViewPager mPager = null;
    private PagerAdapter mPageAdapter = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View reVal = inflater.inflate(R.layout.activity_main, container, false);
        mPager = (ViewPager) reVal.findViewById(R.id.pagerMainContent);
        mPageAdapter = new ScreenSlidePagerAdapter(getActivity().getFragmentManager());
        mPager.setAdapter(mPageAdapter);
        return reVal;
    }

    private MainGridViewFragment mainGridFragment;
    private AlphabetGridViewFragment alphabetGridFragment;

    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public android.app.Fragment getItem(int position) {
            switch (position) {
                case 1:
                    mainGridFragment = new MainGridViewFragment();
                    return mainGridFragment;
                case 0:
                    alphabetGridFragment = new AlphabetGridViewFragment();
                    return alphabetGridFragment;
                default:
                    return null;
            }
        }

        @Override
        public int getCount() {
            return 2;
        }
    }
}

编辑2

显然 MainActivity MainActivityFragment 已加载,且证明是 ActionBar
也注意到 ViewPager 也被加载,因为你仍然可以在页面之间导航(蓝灯表示寻呼机到达最后一页但是你看不到它的内容。

Obviously MainActivity and MainActivityFragment are loaded, and the proof is The ActionBar, notice also that ViewPager is loaded too, because you still can navigate between pages (the blue light means that the pager reached to last page) but you can't see its content.

推荐答案

看起来你的主要活动是在片段中使用getSupportFragmentManager()正在使用getFragmentManager()。

It looks like your main activity is using the getSupportFragmentManager() while your fragment is using getFragmentManager().

不确定这是否值得回答,但我的评级太低,无法以任何其他方式回复。 :)

Not sure if this is worthy of an answer post but my rating is too low to reply any other way. :)

编辑:我相信您可能还需要使用支持库扩展FragmentActivity。

I believe you may also need to extend a FragmentActivity with the support library.

参见: https://stackoverflow.com/a/10609839/2640693

编辑2:

public class MainActivityFragment extends FragmentActivity {
    private ViewPager mPager = null;
    private PagerAdapter mPageAdapter = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View reVal = inflater.inflate(R.layout.activity_main, container, false);
        mPager = (ViewPager) reVal.findViewById(R.id.pagerMainContent);
        mPageAdapter = new ScreenSlidePagerAdapter(getChildFragmentManager());
        mPager.setAdapter(mPageAdapter);
        return reVal;
    }

    private MainGridViewFragment mainGridFragment;
    private AlphabetGridViewFragment alphabetGridFragment;

    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 1:
                    mainGridFragment = new MainGridViewFragment();
                    return (Fragment)mainGridFragment;
                case 0:
                    alphabetGridFragment = new AlphabetGridViewFragment();
                    return (Fragment)alphabetGridFragment;
                default:
                    return null;
            }
        }

        @Override
        public int getCount() {
            return 2;
        }
    }
}

这篇关于更改屏幕旋转时ViewPager片段消失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆