2016-07-30 3 views
0

Мне нужно показать анимацию, возвращаясь к предыдущему фрагменту, поэтому я должен использовать метод onBackPressed. Так как это только в комплекте деятельности, я пытался использовать ссылку:Использовать onBackPressed для фрагментов

@Override 
onBackPressed(){ 
super.onBackPressed(); 
infoFragment.onBackButtonPressed(); 
} 

И в InfoFragment я определил метод onBackButtonPressed, но это не сработало. Так что я попытался так:

view.setFocusableInTouchMode(true); 
     view.requestFocus(); 
     view.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View view, int i, KeyEvent keyEvent) { 
       if(i==KeyEvent.KEYCODE_BACK){ 
        MainActivity mainActivity=(MainActivity)getActivity(); 
        mainActivity.loadMainFragment(); 
        return true; 
       } 
       return false; 
      } 
     }); 

Итак, почему он не работает?

+0

Первый подход должен работать нормально, но я не думаю, что ему нужен пользовательский прослушиватель кнопки. См. Http://stackoverflow.com/questions/10886669/how-to-reverse-fragment-animations-on-backstack –

+0

'onBackPressed()' принадлежит к активности, а не к фрагменту –

+0

Просто используйте setCustomAnimations с FragmentTransaction. – sswierczek

ответ

0

Если вы хотите отложить повторное нажатие, пока ваша пользовательская анимация не закончится, вы должны переписать свой код в соответствии с этим фрагментом.

@Override 
public void onBackPressed(){ 
    infoFragment.onBackButtonPressed(new Runnable(){ 
     @Override 
     public void run(){ 
      super.onBackPressed(); 
     } 
    }); 
} 

Что это работоспособное?

Ваш метод onBackButtonPressed должен получить работоспособный объект и запустить его после завершения пользовательской анимации. Этот runnable используется как функция обратного вызова.

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

Когда это следует использовать?

Для вашей индивидуальной анимации прикрепите animation listener и позвоните этому методу в onAnimationEnd его методе.