android – View中的ViewPager在返回时会丢失内容

前端之家收集整理的这篇文章主要介绍了android – View中的ViewPager在返回时会丢失内容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用FragmentActivity实现tabhost,在第一个选项卡下我加载一个包含Viewpager和CirclePageIndIcator的欢迎片段,我需要在WelcomeFragment的一侧加载4个视图

这是我的WelcomeFragment

  1. public class WelcomeFragment extends Fragment
  2. {
  3. PageAdapter mAdapter;
  4. ViewPager mPager;
  5. CirclePageIndicator mIndicator;
  6. List<Fragment> fragments;
  7. @Override
  8. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
  9. View view = inflater.inflate(R.layout.frag_welcome_layout,null);
  10. mPager=(ViewPager)view.findViewById(R.id.myViewPager);
  11. mIndicator=(CirclePageIndicator)view.findViewById(R.id.circlePageIndicator1);
  12. fragments=new ArrayList<Fragment>();
  13. return view;
  14. }
  15. @Override
  16. public void onActivityCreated(Bundle savedInstanceState) {
  17. super.onActivityCreated(savedInstanceState);
  18. Fragment fragment;
  19. for(int i=0;i<4;i++)
  20. {
  21. fragment= Fragment.instantiate(getActivity(),TipsFragment.class.getName());
  22. fragments.add(fragment);
  23. }
  24. mAdapter = new PageAdapter(getFragmentManager(),fragments);
  25. mPager.setAdapter(mAdapter);
  26. mIndicator.setViewPager(mPager);
  27. }
  28. }

这是我的页面适配器

  1. public class PageAdapter extends FragmentPagerAdapter implements Serializable{
  2.  
  3. List<Fragment> fragments;
  4. public PageAdapter(FragmentManager fm,List<Fragment> frags) {
  5. super(fm);
  6. fragments = frags;
  7.  
  8. }
  9.  
  10. @Override
  11. public Fragment getItem(int arg0) {
  12. // TODO Auto-generated method stub
  13. return TipsFragment.newInstance(0,0);
  14. }
  15.  
  16. @Override
  17. public int getCount() {
  18. // TODO Auto-generated method stub
  19. return 4;
  20. }
  21.  
  22. @Override
  23. public void destroyItem(ViewGroup container,int position,Object object) {
  24. FragmentManager manager = ((Fragment) object).getFragmentManager();
  25. FragmentTransaction trans = manager.beginTransaction();
  26. trans.remove((Fragment) object);
  27. trans.commit();
  28.  
  29. super.destroyItem(container,position,object);
  30. }
  31.  
  32. }

当我首先加载应用程序时,tabFragmentActivity成功加载,并且welcomeFragment中的viewpager工作正常,但是当我移动到第二个选项卡并再次返回第一个选项卡时,ViewPager无法成功加载.

我怎么解决呢?

根据建议,我使用了getChildFragmentManager但是app崩溃了
logcat中的错误

  1. 09-09 13:28:39.412: E/AndroidRuntime(3100): FATAL EXCEPTION: main
  2. 09-09 13:28:39.412: E/AndroidRuntime(3100): java.lang.IllegalStateException: No activity
  3. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1091)
  4. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
  5. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877)
  6. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1492)
  7. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
  8. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
  9. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
  10. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
  11. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
  12. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.os.Handler.handleCallback(Handler.java:725)
  13. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.os.Handler.dispatchMessage(Handler.java:92)
  14. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.os.Looper.loop(Looper.java:137)
  15. 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.app.ActivityThread.main(ActivityThread.java:5041)
  16. 09-09 13:28:39.412: E/AndroidRuntime(3100): at java.lang.reflect.Method.invokeNative(Native Method)
  17. 09-09 13:28:39.412: E/AndroidRuntime(3100): at java.lang.reflect.Method.invoke(Method.java:511)
  18. 09-09 13:28:39.412: E/AndroidRuntime(3100): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
  19. 09-09 13:28:39.412: E/AndroidRuntime(3100): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  20. 09-09 13:28:39.412: E/AndroidRuntime(3100): at dalvik.system.NativeStart.main(Native Method

)

解决方法

如果您在片段中使用ViewPager,则在创建新适配器时,应使用ChildFragmentManager:
  1. getChildFragmentManager()

猜你在找的Android相关文章