Android 在配置更改后替换ViewPager中的片段

Android 在配置更改后替换ViewPager中的片段,android,android-fragments,android-viewpager,android-orientation,Android,Android Fragments,Android Viewpager,Android Orientation,我有一个有两页的ViewPager。第一页是一个列表,根据设备的类型和方向具有不同的布局。在纵向模式下,列表为经典列表,在横向模式下,应显示网格 对于这两种布局,我创建了两个不同的片段:ResultListFragment和ResultGridFragment 这是我的寻呼机适配器: public static class GSPagerAdapter extends FragmentStatePagerAdapter { private Context mContext;

我有一个有两页的ViewPager。第一页是一个列表,根据设备的类型和方向具有不同的布局。在纵向模式下,列表为经典列表,在横向模式下,应显示网格

对于这两种布局,我创建了两个不同的片段:ResultListFragment和ResultGridFragment

这是我的寻呼机适配器:

public static class GSPagerAdapter extends FragmentStatePagerAdapter  {

    private Context mContext;
    private FragmentManager mFragmentManager;
    private AbstractResultFragment mResultFragment;

    public GSPagerAdapter(FragmentManager fm, Context context) {
        super(fm);
        mContext = context;
        mFragmentManager = fm;
    }

    @Override
    public Fragment getItem(int i) {
        Log.v("pager", "GSPagerAdapter.getItem(" + i + ")");

        switch (i) {
        case 0: {
                // if the device is in portrait mode, use a list 

                if (mContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT ) {
                    Log.v("pager","return new list fragment");
                    mResultFragment = new ResultListFragment(); 
                    return  mResultFragment;
                // else use a grid
                } else {
                    Log.v("pager","return new grid fragment");
                    mResultFragment = new ResultGridFragment();
                    return mResultFragment;
                }   

        }
        case 1: {
            Log.v("pager", "return the new filter fragment");
            return new FilterFragment();
        }
        default: {
            Log.v("pager", "return null");
            return null;
        }
        }
    }

    @Override
    public CharSequence getPageTitle(int i) {

        switch (i) {
        case 0:
            return "Result";
        case 1:
            return "Filter";
        }
        return "";
    }

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

    @Override
     public Object instantiateItem(ViewGroup container, int position) {
        Log.v("pager","instantiateItem: "+position);


         return super.instantiateItem(container, position);
     }

    @Override
    public int getItemPosition(Object object){
        Log.v("pager","getItemPosition: "+object);
        return POSITION_NONE;
    }
}
活动恢复时:

public void onResume() {
    super.onResume();
    Log.v("lifecycle", "MainActivity.onResume()");
    if(mViewPager != null)
        mGSPagerAdapter.notifyDataSetChanged();

} 

我做错了什么?我已经阅读了几个问题和答案,但我不知道问题出在哪里。

但是……问题是什么?:)替换没有发生。为什么?日志显示第二个片段(landascape)被调用了吗?没有。只调用实例化项,而不调用getItem。这是因为片段没有被销毁,其配置正在更改,活动被重新创建,片段再次附加。我想你可能必须销毁适配器,然后再创建一次…我还没有想过,但是我不记得FragmentAdapter对这些事情太友好了