2016-11-25 20 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

好。我會盡力找到解決方案並儘快回覆。 –

相關問題