5

i das folgende LayoutWie ein ViewPager mit einem Fragment ersetzen

<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> 

Every ist workinf fein haben, aber ich möchte

die ViewPager mit einem Fragment ersetzen
getSupportFragmentManager().beginTransaction() 
       .replace(R.id.view_pager, new CustomFragment())     
       .commit(); 

dies Den ViewPager nicht reparieren, was soll ich tun ???

+0

Die Dokumentation sagt - 'Ersetzen Sie ein vorhandenes Fragment, das einem Container hinzugefügt wurde. Das ist im Wesentlichen das Gleiche wie das Aufrufen von remove (Fragment) für alle aktuell hinzugefügten Fragmente, die mit derselben containerViewId hinzugefügt wurden und dann (int, Fragment, String) mit den gleichen hier angegebenen Argumenten. "Ich nehme an, Sie können nur' Fragmente 'ersetzen 'und NICHT andere Ansichten. – Varun

Antwort

6

Sie könnten ein Fragment erstellen, das den ViewPager enthält, und dann dieses Fragment ersetzen.

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> 

Ihre activitys .xml-Datei:

<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> 

Und dann ersetzen Fragmente wie folgt aus:

die ViewPagerContainerFragment zum activitys Layout Hinzufügen :

Und irgendwo später in Code: (wenn Sie wollen - die ViewPagerFragment mit einem anderen Fragment ersetzen)

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

Bitte stellen Sie sicher, dass Sie alle Speicherlecks nicht erstellen und Adapter einrichten richtig.

+0

Wenn Sie diese Lösung versuchen, achten Sie auf das Verhalten der Navigation zurück. Schauen Sie sich [diese Frage] an (http://stackoverflow.com/questions/12490963/replacing-viewpager-with-fragment-thennavigating-back). – Miguelos

Verwandte Themen