Android - кнопка имитации назад - PullRequest
65 голосов
/ 27 апреля 2010

Когда я нажимаю кнопку в своем приложении, мне нужно вернуться к последнему действию.

Есть идеи?

Ответы [ 5 ]

92 голосов
/ 27 апреля 2010

Позвонив по номеру finish(), который вы хотите завершить, вы должны позаботиться об этом.

Отредактируйте много лет спустя: Это все еще работает, но это немного неуклюжий подход. Когда я первоначально разместил это сообщение, Fragments не существовало, и (как отметили несколько комментаторов) это не работает совершенно так же, когда задействовано Fragments. Есть лучшие подходы сейчас, если вы используете Fragments.

66 голосов
/ 15 апреля 2014

Только для записи: описанный метод не работает так же, как кнопка возврата в некоторых случаях, но вы можете вызвать

this.onBackPressed();

или

getActivity().onBackPressed();

если вы находитесь во фрагменте для достижения точно такого же поведения.

36 голосов
/ 09 мая 2013

при использовании фрагментов:

getFragmentManager().popBackStack();

или

getSupportFragmentManager().popBackStack();

если вы используете пакет android.support.v4.app

1 голос
/ 03 февраля 2014

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

/**
 * Method that can be used by a fragment that has been started by MainFragment to terminate
 * itself. There is some controversy as to whether a fragment should remove itself from the back
 * stack, or if that is a violation of the Android design specs for fragments. See here:
 * http://stackoverflow.com/questions/5901298/how-to-get-a-fragment-to-remove-itself-i-e-its-equivalent-of-finish
 */
public static void fragmentImplementCancel(Fragment fragment) {

    FragmentActivity fragmentActivity = fragment.getActivity();
    FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager();

    if (fragmentManager.getBackStackEntryCount() == 1) {
        fragmentManager.popBackStack();
    }
    else {
        fragmentActivity.finish();
    }
}

Этот код можно вызвать, например, для реализации кнопки отмены.

    if (theButton.getId() == R.id.btnStatusCancel) {
        StaticMethods.fragmentImplementCancel(this);
    }
0 голосов
/ 23 ноября 2014

Вы можете подделать вызов кнопки «вверх» при нажатии кнопки «назад»:

@Override
public void onBackPressed() {
    onNavigateUp();
}
...