所以我在玩 ViewPager 和 Fragments,但我遇到了一个问题:我可以从第一个 ViewPage/Fragment 滑动到第三个 ViewPage/Fragment,但是一旦我想回到第二个或第一个,它就会崩溃。
异常:java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。
我的 MainActivity(仅 XML 中的 ViewPager):
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 支持库)。
有任何想法吗?