2015-08-01 3 views
1

У меня очень неприятная ситуация с транзакцией фрагментов.Как работает Fragment Transaction с анимацией?

В моей деятельности есть фрагмент, который должен появится с горкой вверх анимация:

public void showConnectedToWifiCard(String ssid) { 
    Bundle bundle = new Bundle(); 
    bundle.putString("SSID", ssid); 

    ConnectedToWifiCardFragmentImpl fm = new ConnectedToWifiCardFragmentImpl(); 
    fm.setArguments(bundle); 

    // Begin the transaction 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 

    // Replace the contents of the container with the new fragment 
    //ft.setCustomAnimations(R.anim.slide_up_anim, R.anim.slide_down_anim); 

    //ft.hide(fm); 
    if (ft == null){ 
     ft.add(R.id.main_small_card, fm); 
    }else{ 
     ft.replace(R.id.main_small_card, fm); 
    } 

    ft.commit(); 
} 

я предположил, что фрагмент Транзакция бы создать фрагмент (или заменить) сразу после анимации, но, результат что:

  • Фрагмент появляется в деятельности
  • Фрагмент исчезает
  • Фрагмент начинается анимация.

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

Как я могу решить эту проблему?

+0

Заканчивать этот вопрос, он, видимо, удастся сделать это без проблем (с java-код в ответе): http://goo.gl/yYHsDp Попробуйте сделать это как он и используя тот же XML-файл (теперь я оставлен вправо, а не подтягиваю анимацию, но это нужно проверить), и сообщите мне, работает ли это или нет. – victorleduc

ответ

0

Я предпочитаю прикреплять элемент вида к фрагменту и использовать invalidate(), чем заменять фрагмент каждый раз при создании фрагмента. Или вы можете использовать анимационную библиотеку, которая вводится в android DOC.

2

Для создания анимации при замене фрагмента, вы можете использовать этот код:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

      //set customize animation here 
      fragmentTransaction.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_left_out, 
        R.anim.slide_right_in, R.anim.slide_right_out); 

      ExampleFragment fragment = ExampleFragment.getInstance(); 

      fragmentTransaction.replace(R.id.fragment, fragment); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 

Пожалуйста, смотрите мой блог для более подробной информации: http://www.devexchanges.info/2015/05/replacing-fragment-and-adding-layouts.html Надеюсь, что это помощь! : D

+0

Как вы можете видеть в моем коде, я сделал то же самое, что и вы (кроме добавления фрагмента в backstack, потому что нет необходимости). Проблема сохраняется в этом коде. –

+0

Хм ... Я думаю, вы должны использовать 'setCustomAnimation (arg1, arg2, arg3, arg4)' вместо 'setCustomAnimation (arg1, arg2)'! –

0

я переделал анимации:

Slide_up.xml

<translate 
    android:fromXDelta="0" 
    android:fromYDelta="1000" 
    android:duration="1000"/> 

slide_down.xml

<translate 
    android:fromXDelta="0" 
    android:fromYDelta="-1000" 
    android:duration="1500"/> 
Смежные вопросы