2013-05-29 181 views
0

我正在用ViewPager概念創建片段。我創建了一個日記應用程序,其中我只使用一個從數據庫獲取所有更新並顯示在其中的片段。直到這一切都很好...根據我的要求,當我點擊片段中的按鈕時,我需要顯示另一個片段,它允許用戶存儲圖像。 我的問題是......片段無法用viewpager中的片段替換

- 如果我在片段中使用替換方法,如果A是由viewpager組成的片段並且B是我想要替換的片段,那麼它不會被正確替換。
--Then如果我使用替代B是可見的,但A也將B片段

FragmentManager m=getActivity().getSupportFragmentManager(); 
       FragmentTransaction ft = getActivity().getSupportFragmentManager() 
         .beginTransaction(); 
       Demobutton demobutton = new Demobutton(); 

       ft.replace(R.id.lay, demobutton); 
       ft.commit(); 

希望你們明白我的問題下出現。如果您覺得我的問題不完整,請告訴我。

+0

是R.id.lay的標識碎片容器? – Blackbelt

+0

沒有它的viewpager – Ramz

+0

這是錯誤的佈局ID。替換的第一個參數必須是容器的ID – Blackbelt

回答

0

我有兩個建議,這取決於你如何使用DemoButton片段:

1)也許你的問題是與嵌套的片段。您從活動中獲取FragmentManager,但如果Demobutton已經是片段的一部分,請改爲使用外部片段的getChildFragmentManager()。

2)根據我使用ViewPager和Fragments的經驗,ViewPager的PagerAdapter應該完成所有的片段事務。您可以從支持庫中擴展並覆蓋類FragmentPagerAdapter,以便在需要時在ViewPager中獲取正確的片段。

+0

我hav與第一個解決方案,但我沒有找到它顯示的結果,因爲它在以前...., – Ramz

0

我已經開發了一個小型示例應用程序,可以在不覆蓋原生類的情況下實現此目的。

重點是使用片段作爲容器。

在你ViewPagerAdapter:

@Override 
public Fragment getItem(int position) { 
    /* 
    * IMPORTANT: This is the point. We create a RootFragment acting as 
    * a container for other fragments 
    */ 
    if (position == 0) 
     return new RootFragment(); 
    else 
     return new StaticFragment(); 
} 

RootFragment版面應該像:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/root_frame" > 
</FrameLayout> 

你可以在這裏查看我的完整的解釋:https://stackoverflow.com/a/21453571/1631136

+0

也在這裏更正:) – dlao

+0

:-) 15個字符.... – kleopatra