227

電話で戻るボタンが押されたときに、特定のアクティビティが前のアクティビティに戻らないようにしたい。

具体的には、ログイン画面とサインアップ画面があり、どちらもHomeScreenログイン/サインアップが成功したときに呼び出される新しいアクティビティを開始します。HomeScreen を起動したら、ユーザーが BACK キーを押してログイン画面やサインアップ画面に戻れないようにしたいと考えています。

を使ってみIntent.FLAG_ACTIVITY_NO_HISTORYたのですが、アプリが Facebook と連携しているので、「Facebook でログイン」を使用すると、Facebook は最初のログイン画面に戻るはずなので、これらのアクティビティの履歴を残す必要があります。

HomeScreenボタンが押されたときにアプリケーションを直接終了するために、BACKボタンの動作をオーバーライドすることを考え、使用しました

@Override
public void onBackPressed() {
    finish();
}

しかし、それも機能しません。

4

13 に答える 13

366

私の提案は、ユーザーに戻ってほしくないアクティビティを終了することです。たとえば、サインイン アクティビティで、 を呼び出した直後に を呼び出しstartActivityますfinish()。ユーザーが [戻る] ボタンを押すと、サインイン アクティビティがスタックから削除されているため、サインイン アクティビティに移動できなくなります。

于 2011-12-28T18:53:08.397 に答える
110

次のソリューションは、通常のログイン/メイン アクティビティ シナリオまたはブロック画面の実装で非常に役立ちます。

前のアクティビティに戻るのではなくアプリを最小化するには、次のonBackPressed()ようにオーバーライドできます。

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

moveTaskToBack(boolean nonRoot)バックスタックをそのままにして、タスク (すべてのアクティビティ) をバックグラウンドに置くだけです。ユーザーがホームボタンを押した場合と同じです。

パラメータboolean nonRoot- false の場合、アクティビティがタスクのルートである場合にのみ機能します。true の場合、タスク内のすべてのアクティビティで機能します。

于 2014-10-21T17:34:27.487 に答える
39

あなたが何を望んでいるのか正確にはわかりませんが、それは可能であるはずであり、あなたはすでに正しい軌道に乗っているようにも思えます。

役立つ可能性のあるいくつかのリンクを次に示します。

Androidで戻るボタンを無効にする

  MyActivity.java =>
    @Override
    public void onBackPressed() {

       return;
    }

あるアクティビティに「戻る」を無効にするにはどうすればよいですか?

  AndroidManifest.xml =>
<activity android:name=".SplashActivity" android:noHistory="true"/>
于 2011-12-25T19:22:57.217 に答える
22

あなたのケースには 2 つの解決策があります。アクティビティ A がアクティビティ B を開始しますが、アクティビティ B でアクティビティ A に戻りたくありません。

1. 前のアクティビティ A をバック スタックから削除しました。

    Intent intent = new Intent(activityA.this, activityB.class);
    startActivity(intent);
    finish(); // Destroy activity A and not exist in Back stack

2. アクティビティ B の [戻る] ボタン アクションを無効にしました。

go back イベントを防止するには、以下の 2 つの方法があります。

1) 推奨アプローチ

@Override
public void onBackPressed() {
}

2)onKeyDown メソッドをオーバーライドする

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK) {
        return false;
    }
    return super.onKeyDown(keyCode, event);
}

役に立つことを願っていますが、それでも状況によって異なります。

于 2016-10-26T10:59:36.280 に答える
7

finish()アプリケーション全体ではなく、現在のアクティビティを閉じる方法を提供します。そして、アプリケーションを強制終了する方法を探そうとしない方がよいでしょう。少しアドバイス。

接続詞を試しましたIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORYか?Intentアクティビティを開始するときにこのフラグを使用することを忘れないでください!

于 2011-12-25T19:23:42.113 に答える
4

finish()直後に入れる

Intent i = new Intent(Summary1.this,MainActivity.class);
            startActivity(i);
finish();
于 2015-04-17T18:19:08.597 に答える
3

paulsm4 の答えは正しいものです。戻るだけの場合はonBackPressed()、戻るボタンが無効になります。ただし、ユースケースを考えると、アクティビティロジックを反転する方が良いと思います。つまり、ホームアクティビティをメインアクティビティにし、ユーザーがサインインしているかどうかを確認し、そうでない場合はサインインアクティビティを開始します。その理由は、メイン アクティビティで [戻る] ボタンをオーバーライドすると、ほとんどのユーザーが [戻る] ボタンを押してアプリが何もしないときに混乱するためです。

于 2011-12-25T20:09:03.173 に答える
2

onKeyDown メソッドをオーバーライドして、戻るボタンが押されたかどうかを確認するだけです。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    {
        //Back buttons was pressed, do whatever logic you want
    }

    return false;
}
于 2015-03-30T12:49:09.193 に答える
2
@Override
public void onBackPressed() {
}

作成するときはonBackPressed()削除するだけsuper.onBackPressed();でうまくいくはずです

于 2018-12-07T05:25:00.667 に答える