更改屏幕旋转时ViewPager片段消失 [英] ViewPager fragments disappear when change screen rotation
问题描述
我正在开发包含 ViewPager
的安卓应用程序,其中包含 Fragment
s,如下所示:
I'm working on android application that contains ViewPager
with Fragment
s, like this:
MainActivity
( MainActivityFragment
( screenSlideViewPager
( Fragment
s))),这意味着:
MainActivity
(MainActivityFragment
(screenSlideViewPager
(Fragment
s))), 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屋!