2

したがって、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サポートライブラリを使用)。

何か案は?

4

1 に答える 1

1

マップビューとフラグメントアクティビティに関するこの問題。私はこれで私のプロジェクトでそれを解決しまし

そしてこれ

于 2012-10-19T08:04:53.107 に答える