5

Mam następujący układJak wymienić ViewPager z fragmentem

<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 jest workinf porządku, ale chcę, aby zastąpić ViewPager z fragmentem

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

jest to nie zastępując ViewPagera co mam zrobić?

+0

Dokumentacja mówi - 'Zamień istniejący fragment, który został dodany do kontenera. Jest to zasadniczo to samo, co wywołanie remove (Fragment) dla wszystkich aktualnie dodanych fragmentów, które zostały dodane z tym samym containerViewId, a następnie dodane (int, Fragment, String) z tymi samymi argumentami podanymi tutaj. Zakładam więc, że możesz tylko zastąpić Fragmenty 'i NIE innych widoków. – Varun

Odpowiedz

6

Można utworzyć fragment o numerze , który zawiera ViewPager,, a następnie zastąp ten fragment.

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> 

Twój Activitys .xml plik:

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

A potem zastąpić Fragments tak:

Dodanie ViewPagerContainerFragment do układu Activitys :

A gdzieś w dalszej części kodu: (jeśli chcesz - wymienić ViewPagerFragment z innego fragmentu)

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

proszę upewnić się, że nie stwarzają żadnych wycieków pamięci i skonfigurować adapter prawidłowo.

+0

Jeśli spróbujesz tego rozwiązania, pamiętaj o zachowaniu nawigacji wstecz. Sprawdź [to pytanie] (http://stackoverflow.com/questions/12490963/replacing-viewpager-with-fragment-then-navigating-back). – Miguelos

Powiązane problemy