2017-01-18 4 views
0

У меня есть активность, в которой есть 2 фрагмента, которые меняются, основываясь на нажатии кнопки.Анимация Android Fragment при замене не работает

Я хотел бы показать анимации при замене appens, поэтому я искал код, и вот что я пришел к выводу:

public void displayView(int page){ 
    switch (page){ 
     case 1: 
      FragmentHome fragmentHome = new FragmentHome(); 
      getSupportFragmentManager().beginTransaction() 
        .replace(R.id.fragment, fragmentHome) 
        .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out).commit(); 
      break; 
     case 2: 
      FragmentHomeBack fragmentHomeBack = new FragmentHomeBack(); 
      getSupportFragmentManager().beginTransaction() 
        .replace(R.id.fragment, fragmentHomeBack) 
        .setCustomAnimations(android.R.anim.accelerate_decelerate_interpolator, android.R.anim.anticipate_interpolator).commit(); 
      break; 
    } 
} 

Я не знаю, почему, но анимации делать не работает, новый фрагмент просто заменяет другой без анимации.

Вот код макета деятельности:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_master" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:padding="@dimen/space10" 
tools:context="context"> 
<include 
    android:id="@+id/ll_left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="@dimen/space5" 
    android:orientation="vertical" 
    android:layout_marginLeft="@dimen/space5" 
    android:layout_marginRight="@dimen/space15" 
    layout="@layout/menu" 
    android:layout_alignParentTop="true" 
    android:layout_above="@+id/imageView" /> 

<FrameLayout 
    android:id="@+id/fragment_holder" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_toRightOf="@id/ll_left"> 

</FrameLayout> 

<ImageView 
    app:srcCompat="@drawable/xlink" 
    android:id="@+id/imageView" 
    android:layout_width="150dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentStart="true" 
    android:scaleType="fitEnd" 
    android:layout_height="70dp" /> 

Компоновка кадра "fragment_holder", где фрагменты.

Спасибо всем!

ответ

2

Это должно сделать трюк приятеля. У меня такой же код, и он работает хорошо.

getSupportFragmentManager() 
       .beginTransaction() 
       .setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out) 
       .replace(R.id.layout_container, fragment) 
       .commit(); 

Но ..

Я понимаю, что разница в коде. Попробуйте установить customAnimations перед заменой, чтобы узнать, что произойдет.

У меня есть предложение улучшить код. В вашей «если» или «переключатель» заявление установить фрагмент как

Fragment fragment; 
    if(page==0){ 
     fragment = new MyFragment(); 
    }else{ 
     fragment = new MySecondFragment(); 
    } 

то у вас есть только этот код один раз

getChildFragmentManager() 
       .beginTransaction() 
       .setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out) 
       .replace(R.id.layout_container, fragment) 
       .commit(); 
+0

спасибо! Я пытаюсь это сделать. –

+0

getChildFragmentManager() не может быть разрешен, как насчет getSUpportFragmentManager() или только getFragmentManager()? –

+0

Это работает! Спасибо Bro;) hahah –

Смежные вопросы