2012-10-19 25 views
2

所以我在玩ViewPager和Fragments,但是我遇到了一個問題:我可以從第一頁滑動到第三個ViewPage/Fragment,但是一旦我想要回到第二或第一,它只是崩潰。ViewPager with Fragments - >第二次選中崩潰

異常:java.lang.IllegalStateException:指定的子項已經有父項。您必須先調用子對象的父對象的removeView()。

我MainActivity(僅一個ViewPager在XML):

public void onCreate(Bundle savedInstanceState) { 
     if(created) 
      return; 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mSectionsPagerAdapter = new SectionsPagerAdapter(
       getSupportFragmentManager()); 

     final ActionBar actionBar = getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     mViewPager 
       .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
        @Override 
        public void onPageSelected(int position) { 
         actionBar.setSelectedNavigationItem(position); 
        } 
       }); 

     for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
      actionBar.addTab(actionBar.newTab() 
        .setText(mSectionsPagerAdapter.getPageTitle(i)) 
        .setTabListener(this)); 
     } 
    } 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int i) { 
      Fragment fragment = null; 
      switch (i) { 
      case 0: 
       fragment = new TrackingFragment(); 
       break; 
      case 1: 
       fragment = new TripFragment(); 
       break; 
      case 2: 
       fragment = new MapFragment(); 
       break; 
      } 

      Bundle args = new Bundle(); 
      args.putInt(TrackingFragment.ARG_SECTION_NUMBER, i + 1); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public int getCount() { 
      return 3; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
      case 0: 
       return getString(R.string.title_section1).toUpperCase(); 
      case 1: 
       return getString(R.string.title_section2).toUpperCase(); 
      case 2: 
       return getString(R.string.title_section3).toUpperCase(); 
      } 
      return null; 
     } 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction arg1) { 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction arg1) { 
     try { 
      mViewPager.setCurrentItem(tab.getPosition()); 
     } catch (IllegalStateException e) { 
     } 
    } 

我有3個片段與含有的LinearLayout,一個作爲ListFragment和一個返回MapView的(使用Android支持庫)之一。

任何想法?

回答

1

這個問題與地圖視圖和片段活動。我 this

this

解決它在我的項目