2

所以我在玩 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 支持库)。

有任何想法吗?

4

1 回答 1

1

地图视图和片段活动的这个问题。我在我的项目中解决了 这个问题

这个

于 2012-10-19T08:04:53.107 回答