2016-11-25 22 views
0

在我的活动中我有简单的FrameLayout小部件,我试图附加简单的片段到replace和使用一些片段嵌入片段,但我得到Fragment already added错误,当我尝试添加在分片嵌套一些片段,例如这是我的活动:Android attching片段活动视图中获取Fragment已添加错误

public class MainActivity extends AppCompatActivity { 

    private CarouselFragment carouselFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ... 

     if (savedInstanceState == null) { 
      initScreen(); 

     } else { 
      carouselFragment = (CarouselFragment) getSupportFragmentManager().getFragments().get(0); 
     } 

     ... 
    } 

    private void initScreen() { 
     carouselFragment = new CarouselFragment(); 

     final FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, carouselFragment) 
       .commit(); 
    } 
} 

和嵌套片段CarouselFragment类:

在这个片段我正在尝试设置一些其他的片段适配器使用它们

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_carousel, container, false); 

    ButterKnife.bind(this, view); 

    context = getContext(); 
    viewPager = (ViewPagerCustomDuration) view.findViewById(R.id.vp_pages); 

    adapter = new CarouselViewPagerAdapter(getChildFragmentManager()); 

    adapter.addFragment(new FragmentA()); 
    adapter.addFragment(new FragmentB()); 

    viewPager.setAdapter(adapter); 

    viewPager.setPageMargin(50); 
    viewPager.setOffscreenPageLimit(3); 
    viewPager.setScrollDurationFactor(4); 
    viewPager.setOffscreenPageLimit(1); 

    return view; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

} 

,然后这是我的适配器:

public class CarouselViewPagerAdapter extends FragmentStatePagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 

    public CarouselViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment) { 
     mFragmentList.add(fragment); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return null; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     Fragment fragment = (Fragment) super.instantiateItem(container, position); 
     mFragmentList.add(position, fragment); 
     return fragment; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     mFragmentList.remove(position); 
     super.destroyItem(container, position, object); 
    } 

    public Fragment getRegisteredFragment(int position) { 
     return mFragmentList.get(position); 
    } 
} 

问题是这段代码行:

adapter.addFragment(new FragmentA()); 
    adapter.addFragment(new FragmentB()); 
+0

检查溶液。 [这里](http://stackoverflow.com/questions/6250580/fragment-already-added-illegalstateexception)不完全是你的问题,但可能是你可以找出可能是什么问题? – Raghavendra

回答

1

您只能替换您通过FragmentTransaction动态添加的片段。

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

// Replace whatever is in the fragment_container view with this fragment, 
// and add the transaction to the back stack so the user can navigate back 
transaction.replace(R.id.fragment_container, newFragment); 
transaction.addToBackStack(null); 

// Commit the transaction 
transaction.commit(); 

尝试使用教程: - http://sapandiwakar.in/replacing-fragments/

看一看这样的: - Replacing a fragment with another fragment inside activity group

希望这会帮助你。

+0

http://stackoverflow.com/questions/6250580/fragment-already-added-illegalstateexception这可能会帮助你。 –

+0

我已经测试过这个解决方案,但是当我使用我的主片段作为'CarouselFragment'不打电话并且不运行 –

+0

好。我会尽力找到解决方案并尽快回复。 –

相关问题