web-dev-qa-db-ja.com

Android-戻るボタンのシミュレーション

アプリのボタンを押すと、最後のアクティビティに戻る必要があります。

何か案は?

65
david

終了するアクティビティからfinish()を呼び出すと、これに注意する必要があります。

何年も後に編集:これはまだ機能しますが、少々手間がかかります。私が最初にこれを投稿したとき、Fragmentsは存在しませんでした(いくつかのコメント者が指摘しているように)これは、Fragmentsが含まれる場合、まったく同じようには機能しません。 Fragments.を使用している場合、より良いアプローチがあります

94
Chris Thompson

記録のために:説明されたメソッドは、場合によっては戻るボタンとは異なりますが、呼び出すことができます

this.onBackPressed();

または

getActivity().onBackPressed();

あなたがフラグメント内にいる場合、同じ動作を実現します。

66
黄雨伞

フラグメントを使用する場合:

getFragmentManager().popBackStack();

または

getSupportFragmentManager().popBackStack();

android.support.v4.appパッケージを使用している場合

36
zajac.m2

これは、同じフラグメントがアクティビティ内の唯一のフラグメントである場合や、マルチフラグメントアクティビティの一部である場合(たとえば、2つのフラグメントが同時に表示されるタブレットなど)の場合です。

/**
 * 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);
    }
1
RenniePet