5

我有以下佈局如何與一個片段

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 


<android.support.v4.view.ViewPager 
    android:id="@+id/view_pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</android.support.v4.view.ViewPager> 

Everyting是workinf罰款,但我想用一個片段來代替ViewPager

getSupportFragmentManager().beginTransaction() 
       .replace(R.id.view_pager, new CustomFragment())     
       .commit(); 

這是更換ViewPager不修補ViewPager我該怎麼辦?

+0

文檔說 - 替換已添加到容器的現有片段。這與爲所有當前添加的片段調用remove(Fragment)相同,然後使用相同的參數添加(int,Fragment,String),然後添加相同的參數。因此,我認爲您只能替換'Fragments '而不是其他意見。 – Varun

回答

6

您可以創建一個片段,其中包含ViewPager,,然後替換該片段。

public class ViewPagerContainerFragment extends Fragment { 

    private ViewPager mViewPager; 

    public ViewPagerContainerFragment() { } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

     View root = inflater.inflate(R.layout.view_pager_container_fragment, container, false);   

     // Set up the ViewPager, attaching the adapter and ... 
     mViewPager = (ViewPager) root.findViewById(R.id.viewPager); 

     // do other stuff... 

     return root; 
    } 
} 

view_pager_container_fragment.xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/rlMain" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     /> 
</RelativeLayout> 

你Activitys .xml文件:

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

然後替代片段是這樣的:

添加ViewPagerContainerFragment到Activitys佈局:

而且在代碼的某個地方後(如果你想 - 與另一片段取代ViewPagerFragment)

getSupportFragmentManager().beginTransaction() 
       .replace(R.id.content_frame, new CustomFragment())     
       .commit(); 

請確保你沒有創建任何內存泄漏和設置您的適配器正常。

+0

如果您嘗試此解決方案,請注意導航返回行爲。看看[這個問題](http://stackoverflow.com/questions/12490963/replacing-viewpager-with-fragment-then-navigating-back)。 – Miguelos

相關問題