我正在使用FragmentActivity实现tabhost,在第一个选项卡下我加载一个包含Viewpager和CirclePageIndIcator的欢迎片段,我需要在WelcomeFragment的一侧加载4个视图
这是我的WelcomeFragment
- public class WelcomeFragment extends Fragment
- {
- PageAdapter mAdapter;
- ViewPager mPager;
- CirclePageIndicator mIndicator;
- List<Fragment> fragments;
- @Override
- public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.frag_welcome_layout,null);
- mPager=(ViewPager)view.findViewById(R.id.myViewPager);
- mIndicator=(CirclePageIndicator)view.findViewById(R.id.circlePageIndicator1);
- fragments=new ArrayList<Fragment>();
- return view;
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- Fragment fragment;
- for(int i=0;i<4;i++)
- {
- fragment= Fragment.instantiate(getActivity(),TipsFragment.class.getName());
- fragments.add(fragment);
- }
- mAdapter = new PageAdapter(getFragmentManager(),fragments);
- mPager.setAdapter(mAdapter);
- mIndicator.setViewPager(mPager);
- }
- }
这是我的页面适配器
- public class PageAdapter extends FragmentPagerAdapter implements Serializable{
- List<Fragment> fragments;
- public PageAdapter(FragmentManager fm,List<Fragment> frags) {
- super(fm);
- fragments = frags;
- }
- @Override
- public Fragment getItem(int arg0) {
- // TODO Auto-generated method stub
- return TipsFragment.newInstance(0,0);
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return 4;
- }
- @Override
- public void destroyItem(ViewGroup container,int position,Object object) {
- FragmentManager manager = ((Fragment) object).getFragmentManager();
- FragmentTransaction trans = manager.beginTransaction();
- trans.remove((Fragment) object);
- trans.commit();
- super.destroyItem(container,position,object);
- }
- }
当我首先加载应用程序时,tabFragmentActivity成功加载,并且welcomeFragment中的viewpager工作正常,但是当我移动到第二个选项卡并再次返回第一个选项卡时,ViewPager无法成功加载.
我怎么解决呢?
根据建议,我使用了getChildFragmentManager但是app崩溃了
logcat中的错误
- 09-09 13:28:39.412: E/AndroidRuntime(3100): FATAL EXCEPTION: main
- 09-09 13:28:39.412: E/AndroidRuntime(3100): java.lang.IllegalStateException: No activity
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1091)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1492)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.os.Handler.handleCallback(Handler.java:725)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.os.Handler.dispatchMessage(Handler.java:92)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.os.Looper.loop(Looper.java:137)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.app.ActivityThread.main(ActivityThread.java:5041)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at java.lang.reflect.Method.invokeNative(Native Method)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at java.lang.reflect.Method.invoke(Method.java:511)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
- 09-09 13:28:39.412: E/AndroidRuntime(3100): at dalvik.system.NativeStart.main(Native Method
)
解决方法
如果您在片段中使用ViewPager,则在创建新适配器时,应使用ChildFragmentManager:
- getChildFragmentManager()