Android ViewPager(带有pagetransformer动画)在旋转屏幕时崩溃

Android ViewPager(带有pagetransformer动画)在旋转屏幕时崩溃,android,android-viewpager,fragmentpageradapter,Android,Android Viewpager,Fragmentpageradapter,我刚刚注意到,如果我使用DepthPageTransformer()动画,当将屏幕纵向旋转到横向时,应用程序会崩溃。 崩溃原因是NullPointerException:(但这与我的数组列表或对象无关。已经添加了原因。并且已经添加了调试结果。如果我不使用任何转换器,应用程序工作得很好。) 这是第一条错误线 在android.support.v4.view.ViewPager.getChildDrawingOrder(ViewPager.java:800)中 这意味着mDrawingOrdered

我刚刚注意到,如果我使用DepthPageTransformer()动画,当将屏幕纵向旋转到横向时,应用程序会崩溃。

崩溃原因是NullPointerException:(但这与我的数组列表或对象无关。已经添加了原因。并且已经添加了调试结果。如果我不使用任何转换器,应用程序工作得很好。)

这是第一条错误线

在android.support.v4.view.ViewPager.getChildDrawingOrder(ViewPager.java:800)中

这意味着mDrawingOrderedChildren是空的。为什么会这样,我不知道。。。
通过调试,我注意到:
如果我禁用/注释setPageTransformer(true,new DepthPageTransformer()),则应用程序运行良好

private void setupViewPager(ViewPager viewPager) {

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(adapter);
// if uncomment here,app crashes when rotating screen.
//  viewPager.setPageTransformer(true,new DepthPageTransformer()); 

}
和DepthPageTransformer.java

public class DepthPageTransformer implements ViewPager.PageTransformer {
    private static final float MIN_SCALE = 0.75f;
    @Override
    public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();

        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.setAlpha(0);

        } else if (position <= 0) { // [-1,0]

            view.setAlpha(1);
            view.setTranslationX(0);
            view.setScaleX(1);
            view.setScaleY(1);
            view.bringToFront();


        } else if (position <= 1) { // (0,1]
            // Fade the page out.
            view.setAlpha(1 - position);

            // Counteract the default slide transition
            view.setTranslationX(pageWidth * -position);

            // Scale the page down (between MIN_SCALE and 1)
            float scaleFactor = MIN_SCALE
                    + (1 - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);

        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0);
        }
    }

}

我认为问题出在DepthPageTransformer中,但我仍然无法解决。在建议中感谢您(并感谢您在未阅读整个问题的情况下否决并关闭请求)。

只需在清单文件中添加这一行即可

<activity
            -----
             -----
            android:configChanges="orientation|screenSize" >
</activity>


希望这有助于您

可能重复的“是”,我找到了它抛出NPE错误的原因,并写道“这意味着mDrawingOrderedChildren为空。为什么会发生,我不知道…”我不知道为什么mdrawingorderedchildren是空的。谢谢你的否决投票和很好的回答!帮助了我很多!!你的应用程序崩溃了,因为每当你改变你的旋转活动刷新时,我都无法捕捉getActivity().getResources().getConfiguration().orientation==Configuration.orientation\u Fragment oncreateview中的纵向?如果纵向显示它的2列,如果横向显示3列,则显示StaggedGridLayoutManager,但现在它没有正确检测到它。我检查方向纵向与否,并获取R.integer.column\u大小(正常、小、大、xlarge)不同的值。但现在它无法正确检测。如果我在我的应用程序中不使用任何pagetransformer之类的深度,它就可以正常工作,而不会添加任何内容来显示。为什么会发生这种情况,我真的不知道。
public class DepthPageTransformer implements ViewPager.PageTransformer {
    private static final float MIN_SCALE = 0.75f;
    @Override
    public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();

        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.setAlpha(0);

        } else if (position <= 0) { // [-1,0]

            view.setAlpha(1);
            view.setTranslationX(0);
            view.setScaleX(1);
            view.setScaleY(1);
            view.bringToFront();


        } else if (position <= 1) { // (0,1]
            // Fade the page out.
            view.setAlpha(1 - position);

            // Counteract the default slide transition
            view.setTranslationX(pageWidth * -position);

            // Scale the page down (between MIN_SCALE and 1)
            float scaleFactor = MIN_SCALE
                    + (1 - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);

        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0);
        }
    }

}
public class ViewPagerAdapter extends FragmentPagerAdapter{

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                return HomeFragment.newInstance("Home");
            case 1:
                return AFragment.newInstance("a");
            case 2:
                return BFragment.newInstance("b");
            case 3:
                return CFragment.newInstance("c");
            default:
                return HomeFragment.newInstance("home");
        }

    }
    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0: return "Home";
            case 1: return "A";
            case 2: return "B";
            case 3: return "C";
        }
        return null;
    }

    @Override
    public int getCount() {
        return 4;
    }
}
<activity
            -----
             -----
            android:configChanges="orientation|screenSize" >
</activity>