2014-09-16 6 views
0

У меня есть ActionBarActivity «B», родителем которого является ActionBarActivity «A» (также определенный в манифесте). A находится в режиме запуска «singleTask». У меня есть анимации при запуске B от A следующим образом:Как завершить работу с пользовательской анимацией при нажатии домашней кнопки

public void onItemClick(...) { 
    Intent mIntent = new Intent(getActivity(), B.class); 
    startActivity(mIntent); 
    getActivity().overridePendingTransition(R.anim.B_in, R.anim.A_out); 
} 

На B, у меня есть следующий onOptionsItemSelected и onBackPressed:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == android.R.id.home) { 
     getSupportFragmentManager().popBackStackImmediate(); 
     //onBackPressed(); 
     //finish(); 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    overridePendingTransition(R.anim.A_in, R.anim.B_out); 
} 

Вот проблема: Когда я нажимаю кнопку назад, анимацию at onBackPressed происходит, как ожидалось. Однако, когда я нажимаю значок в левом верхнем углу панели действий, вызывается popBackStackImmediate и воспроизводится анимация по умолчанию для Android, которая отличается. Итак:

  1. Как я могу получить такую ​​же анимацию, как в onBackPressed?
  2. Должен ли я использовать onBackPressed() вместо popBackStackImmediate()? Будет ли он давать тот же результат, что и popBackStackImmediate?

Любые предложения и лучшие практики приветствуются ...

ответ

2

Вы можете использовать .popBackStack() вместо popBackStackImmediate(), а затем overrride в pendingTransition, которые могли бы работать. Так как это оба действия, моя склонность состояла в том, чтобы называть финиш(); затем переопределитьPendingTransition().

+0

Хотя я не решаюсь называть finish() в моем коде до сих пор, я использую для этого случая функцию finish() + overridePendingTransition(). Благодарю. – Mehmed