したがって、ViewPagerとFragmentsで遊んでいますが、問題が発生しています。最初のViewPage /Fragmentから3番目のViewPage/Fragmentにスワイプできますが、2番目または1番目に戻りたい場合は、クラッシュします。
例外: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つのフラグメントがあります。1つはLinearLayoutを含み、もう1つはListFragmentとして、もう1つはMapViewを返します(Androidサポートライブラリを使用)。
何か案は?