Map碎片膨胀布局时:java.lang.illegalstateexception:已添加片段

5jdjgkvh  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(322)

我得到下一个错误:java.lang.illegalstateexception:已经添加了片段。
这是一个每次我更改选项卡时都会膨胀的布局,如图所示:
![[第一个选项卡]http://prntscr.com/h4e8pc
![[第二个选项卡]http://prntscr.com/h4ebyn
所以我知道了这个问题,但是我尝试了很多方法来解决它却没有结果。我试着用 .replace 而不是 .add ,这样它不会崩溃,但Map不会加载。当我切换到那个选项卡时,也尝试删除片段,但结果与 .replace 一个。

case R.id.navigation_dashboard:

                frame = (FrameLayout) findViewById(R.id.content);
                frame.removeAllViewsInLayout();
                LayoutInflater.from(getApplicationContext())
                              .inflate(R.layout.activity_prueba_dashboard, frame, true);

                fragmentTransaction =
                        getFragmentManager().beginTransaction();
                fragmentTransaction.add(R.id.content2, mMapFragment);
                fragmentTransaction.commit();
                mMapFragment.getMapAsync(my_maps_class);
30byixjq

30byixjq1#

您可能正在尝试替换相同片段的内容,在本例中,您不需要fragmenttransaction。
解决方案是创建第二个片段,在该片段上有Map,在这种情况下需要事务。

js81xvg6

js81xvg62#

我相信在那种情况下使用viewpager要干净得多。检查此代码:

public class HomeViewPagerAdapter extends FragmentPagerAdapter {

    public static final int FRAGMENT_A_INDEX = 0;
    public static final int FRAGMENT_B_INDEX = 1;
    public static final int FRAGMENT_C_INDEX = 2;

    public static final int FRAGMENTS_COUNT = 3;

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

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case FRAGMENT_A_INDEX:
                return FragmentA.newInstance();
            case FRAGMENT_B_INDEX:
                return FragmentB.newInstance();
            case FRAGMENT_C_INDEX:
                return FragmentC.newInstance();
            default:
                return null;
        }
    }

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

然后将适配器与宿主appcompat活动中的viewpager链接,如下所示:

HomeViewPagerAdapter homeTabsAdapter = new HomeViewPagerAdapter(getSupportFragmentManager());
homeTabsViewPager.setAdapter(homeTabsAdapter);

您可以通过调用以下命令轻松地在片段之间切换:

homeTabsViewPager.setCurrentItem(HomeViewPagerAdapter.FRAGMENT_A_INDEX, false);

相关问题