2013-05-19 4 views
0

Я использую этот код от here, чтобы создать анимацию Flip Card для старых Android-устройств. Теперь я хочу переключиться на фрагмент, который не находится в текущей активности. Я пытался с этим кодом:Перейдите к фрагменту, которого нет в текущей деятельности

MyFragment f = new MyFragment(); 

getActivity().getSupportFragmentManager().beginTransaction().add(R.id.item_detail_container, f).commit(); 
getActivity().getSupportFragmentManager().executePendingTransactions(); 

f.getView().setVisibility(View.GONE); 
View root = getActivity().getWindow().getDecorView().findViewById(android.R.id.content); 

FlipAnimation flipAnimation = new FlipAnimation(this.getView(), f.getView()); 
root.startAnimation(flipAnimation); 

Но тогда речь идет о NullPointerException на toView.setVisibility(View.VISIBLE); в классе FlipAnimation. Как я могу перейти к фрагменту, который не находится в текущей активности?

EDIT: Я решаю вопрос с ответом 1 и комментариями от него. Кодекс здесь обновлен и теперь работает отлично.

ответ

2

commit() на FragmentTransaction не является незамедлительным. Он асинхронный. Следовательно, к моменту возвращения commit() ваш фрагмент еще не был вызван с onCreateView(), и поэтому getView() возвращает null.

Я бы подумал, что правильным ответом будет то, что вы будете применять свои анимации прямо в FragmentTransaction через setCustomAnimations().

Помимо этого, вы можете попытаться выполнить свою работу, чтобы выполнить FlipAnimation, поэтому это происходит после завершения транзакции.

+0

Я думаю, что olution с помощью 'setCustomAnimations()' не работает на более старых устройствах, потому что мне нужно предоставить некоторые XML-ресурсы для метода, а в xml - ObjectAnimator, который работает только на Android> 3.0. Решение с сообщением должно работать Я думаю. Но как я должен предоставить объект FlipAnimation для метода и на каком фрагменте я должен его называть? Не могли бы вы дать мне пример кода? – Cilenco

+0

@Cilenco: Я никогда не пробовал делать анимацию так, как вы есть, поэтому у меня нет образца кода. Я просто указываю, что вы не можете сделать свою анимацию там, где находитесь, потому что «Просмотр», который вы хотите оживить, не существует. Вы можете рассматривать только анимацию на устройствах, которые поддерживают 'setCustomAniamtions()'. – CommonsWare

+0

Я получил его :) 'commit() на FragmentTransaction не сразу. Это асинхронно. Это важная вещь. Мне нужно вызвать 'executePendingTransactions()', тогда вызывается onCreateView и все работает нормально. Я обновил свой первый пост. Спасибо за помощь. – Cilenco

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