Android 在配置更改后替换ViewPager中的片段
我有一个有两页的ViewPager。第一页是一个列表,根据设备的类型和方向具有不同的布局。在纵向模式下,列表为经典列表,在横向模式下,应显示网格 对于这两种布局,我创建了两个不同的片段:ResultListFragment和ResultGridFragment 这是我的寻呼机适配器: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;
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对这些事情太友好了