前の活動に戻らないようにするには?
電話で「戻る」ボタンを押すと、特定のアクティビティが前のアクティビティに戻らないようにします。
具体的には、ログイン画面とサインアップ画面があり、どちらもログイン/サインアップに成功するとHomeScreen
という新しいアクティビティが開始されます。 HomeScreenが起動したら、BACKキーを押してユーザーがログイン画面に戻ったり、登録画面にアクセスしたりできないようにします。
私はIntent.FLAG_ACTIVITY_NO_HISTORY
を使ってみましたが、アプリケーションはFacebookと統合されているので、 'Login with Facebook'を使うと、Facebookは最初のログイン画面に戻るはずです。
ボタンが押されたときにアプリケーションを直接終了するためにHomeScreen
のBACKボタンの動作をオーバーライドすることを考えました。
@Override
public void onBackPressed() {
finish();
}
しかしそれはまた働かない。
私の提案は、あなたがユーザに戻って欲しくない活動を終えることでしょう。たとえば、サインインアクティビティで、startActivity
を呼び出した直後にfinish()
を呼び出します。ユーザーが戻るボタンを押すと、スタックから削除されているため、サインインアクティビティに移動できません。
以下の解決策は、通常のログイン/メインアクティビティのシナリオやブロッキングスクリーンの実装に非常に役立ちます。
以前のアクティビティに戻らずにアプリを最小化するには、次のようにonBackPressed()
をオーバーライドできます。
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
moveTaskToBack(boolean nonRoot)
はバックスタックをそのままにして、あなたのタスク(全てのアクティビティ)をバックグラウンドにするだけです。 ユーザーがホームボタンを押した場合と同じ。
パラメータboolean nonRoot
- falseの場合、これはアクティビティがタスクのルートである場合にのみ機能します。 trueの場合、タスク内のあらゆる活動に機能します。
私はあなたが何を望んでいるのか正確にはわかりませんが、それは可能なはずのように思えます、そしてそれはあなたがすでに正しい軌道に乗っているようにも思えます。
これは役に立つかもしれない少数のリンクです:
MyActivity.Java =>
@Override
public void onBackPressed() {
return;
}
AndroidManifest.xml =>
<activity Android:name=".SplashActivity" Android:noHistory="true"/>
あなたのケースには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の戻るボタン操作を無効にしました。
以下のように元に戻らないようにするには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);
}
それが役に立つことを願っていますが、それでもあなたの状況によります。
finish()
を使用すると、アプリケーション全体ではなく現在のアクティビティを閉じることができます。そして、あなたはアプリケーションを殺すためのメソッドを探すのを試みないでください。ちょっとしたアドバイス。
あなたはIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY
の接続を試みましたか? Intent
の開始時のアクティビティでこのフラグを使用することを忘れないでください。
直後にfinish()
を置く
Intent i = new Intent(Summary1.this,MainActivity.class);
startActivity(i);
finish();
この方法はうまくいきます
Intent intent = new Intent(Profile.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
paulsm4の答えは正しいものです。 onBackPressed()
に戻ったときに戻るボタンを無効にします。ただし、ユースケースを考えると、アクティビティロジックを反転する、つまりホームアクティビティをメインにする、ユーザーがそこにサインインしているかどうかを確認する、そうでない場合はサインインアクティビティを開始することをお勧めします。その理由は、あなたがあなたのメインアクティビティで戻るボタンをオーバーライドすると、彼らが押し戻してあなたのアプリが何もしないとき、ほとんどのユーザーは混乱するでしょう。
アプリケーションのすべてのアクティビティに戻りたくない場合は、次のものを使用できます。
Android:launchMode="singleTask"
ここでもっと学びましょう: http://developer.Android.com/guide/topics/manifest/activity-element.html
すでにたくさんのすばらしい解決策が提案されているので、illはもっと控えめな説明をしようとします。
どのようにスキップして前のアクティビティに戻ってきますか?
Backstackから前のActivityを削除します。単純な
Backstackから前のアクティビティを削除する方法
finish()
メソッドを呼び出す
通常の流れ:
すべてのアクティビティはバックスタックと呼ばれるスタックに格納されています。
新しいアクティビティを開始すると(startActivity(...)
)、新しいアクティビティはスタックの一番上にプッシュされ、戻るボタンを押すとそのアクティビティがスタックからポップされます。
注意すべき重要な点は、戻るボタンが押されたときにfinish();
メソッドが内部的に呼び出されることです。これはonBackPressed()メソッドのデフォルトの動作です。
それで、あなたがアクティビティBをスキップしたいのならば?
すなわちA <--- C
アクティビティBのfinish();
の後にstartActvity(...)
メソッドを追加するだけです。
Intent i = new Intent(this, C.class);
startActivity(i);
finish();
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;
}
プット
finish();
ActivityStartの直後にアクティビティを停止して、元に戻ることを妨げます。それから加えて
onCreate(){
getActionBar().setDisplayHomeAsUpEnabled(false);
...
}
あなたが始めている活動に。
@Override
public void onBackPressed() {
}
onBackPressed()
を作成したら、super.onBackPressed();
を削除してください。