如何解决屏幕旋转时 viewpager 中的选项卡覆盖的问题?
How to solve this that tabs in viewpager overlay when screen rotation?
这里,我有一个带有 ViewPager 的 Activity,它有 4 个选项卡,这里是 activity 屏幕截图 link。
这是垂直屏幕时选项卡 4 的屏幕截图。
当activity打开时,我切换到第四个标签,再切换到第二个,旋转屏幕,第四个标签的一部分会覆盖在第二个标签上,但是当切换到第一个和第三个时,它不会发生,
图片如下:
选项卡 4:
选项卡 1:
选项卡 2:
我怎么能解决这个问题?
viewpager的适配器如下:
public class MainPageFragmentPageAdapter extends FragmentPagerAdapter {
SparseArray<Fragment> fragmentSparseArray = new SparseArray<Fragment>();
private Fragment currentSelectedFragment;
public MainPageFragmentPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (fragmentSparseArray.get(position) == null) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new NewHomePageFragment();
break;
case 1:
fragment = new NewDiscoverFragment();
break;
case 2:
fragment = new NewUserMessageFragment();
break;
case 3:
fragment = new NewUserDetailFragment();
}
fragmentSparseArray.put(position, fragment);
}
currentSelectedFragment = fragmentSparseArray.get(position);
return currentSelectedFragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
@Override
public int getCount() {
return 4;
}
public Fragment getCurrentSelectedFragment() {
return currentSelectedFragment;
}
}
任何你想看的代码请在下面评论。
正如你所说,当分页器不可见时,你不会销毁Item,所以它仍然在内存中,并重新绘制它
请通过 onConfigurationChanged Android 方法管理屏幕方向。
这里,我有一个带有 ViewPager 的 Activity,它有 4 个选项卡,这里是 activity 屏幕截图 link。
这是垂直屏幕时选项卡 4 的屏幕截图。 当activity打开时,我切换到第四个标签,再切换到第二个,旋转屏幕,第四个标签的一部分会覆盖在第二个标签上,但是当切换到第一个和第三个时,它不会发生, 图片如下:
选项卡 4:
选项卡 1:
选项卡 2:
我怎么能解决这个问题?
viewpager的适配器如下:
public class MainPageFragmentPageAdapter extends FragmentPagerAdapter {
SparseArray<Fragment> fragmentSparseArray = new SparseArray<Fragment>();
private Fragment currentSelectedFragment;
public MainPageFragmentPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (fragmentSparseArray.get(position) == null) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new NewHomePageFragment();
break;
case 1:
fragment = new NewDiscoverFragment();
break;
case 2:
fragment = new NewUserMessageFragment();
break;
case 3:
fragment = new NewUserDetailFragment();
}
fragmentSparseArray.put(position, fragment);
}
currentSelectedFragment = fragmentSparseArray.get(position);
return currentSelectedFragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
@Override
public int getCount() {
return 4;
}
public Fragment getCurrentSelectedFragment() {
return currentSelectedFragment;
}
}
任何你想看的代码请在下面评论。
正如你所说,当分页器不可见时,你不会销毁Item,所以它仍然在内存中,并重新绘制它
请通过 onConfigurationChanged Android 方法管理屏幕方向。