5

ho il seguente layoutCome sostituire un ViewPager con un frammento

<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 va bene workinf ma voglio sostituire il ViewPager con un frammento

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

questo è non ripetere il ViewPager cosa devo fare ???

+0

La documentazione dice: 'Sostituisci un frammento esistente che è stato aggiunto a un contenitore. Questo è essenzialmente lo stesso di chiamare remove (Fragment) per tutti i frammenti attualmente aggiunti che sono stati aggiunti con lo stesso containerViewId e quindi aggiungere (int, Fragment, String) con gli stessi argomenti qui riportati. Suppongo che tu possa solo sostituire 'Fragments 'e NON altre visualizzazioni. – Varun

risposta

6

È possibile creare un frammento che contiene il ViewPager, e quindi sostituire tale frammento.

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> 

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

E poi sostituire Frammenti in questo modo:

Aggiunta del ViewPagerContainerFragment al layout activitys :

E da qualche parte più avanti nel codice: (se si vuole - sostituire il ViewPagerFragment con un altro frammento)

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

Si prega di fare in modo che non si creano perdite di memoria e impostare l'adattatore propriamente.

+0

Se si tenta questa soluzione essere consapevoli del comportamento di navigazione indietro. Dai un'occhiata a [questa domanda] (http://stackoverflow.com/questions/12490963/replacing-viewpager-with-fragment-then-navigating-back). – Miguelos

Problemi correlati