14

私の質問は、これらのタイプの質問とは少し異なります。アクティビティスタックを削除またはクリアしてから、新しいアクティビティを開始する必要があります。clear_topフラグの問題ではないと思います。私は例で説明しています:

私の活動の流れ:

Login > Home > Screen1 > screen2 ....

ログインアクティビティを終了するか、no_historyフラグを使用して呼び出します。だから私の活動はこんな感じ

Login(finished)> Home [bottom of the stack now] > Screen1 > Screen2[top of the stack]

セッションエラーを処理する必要があります。いずれかの時点でセッションエラーが発生した場合は、ログインアクティビティに戻る必要があります。ただし、スタックにログインアクティビティがないことを忘れないでください。したがって、clear_topは機能しません。

Screen2でセッションエラーが発生した場合は、フルスタック(screen2、screen1、home)をクリアしてから、ログインアクティビティを開始する必要があります。戻るボタンを押してログインアクティビティを実行すると、アプリが閉じます。

アクティビティスタックをクリアする方法はありますか?

前もって感謝します

4

4 に答える 4

21

これを使って

Intent i = new Intent(yourScreen.this,Home.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.putExtra("EXIT", true);
        startActivity(i);

そして、HomeクラスのonCreateで、これを実行して確認します。

if (getIntent().getBooleanExtra("EXIT", false)) 
    {
        Intent i = new Intent(Home.this,Login.class);
        startActivity(i);
        finish();
    }

これが本質的に何をするかは、あなたがどんな活動をしていても、明確なトップフラグでホーム画面を呼び出すことができます。ホーム画面では、onCreateメソッドにチェック条件があり、スタックをクリアしてログイン画面に移動します。ログイン画面で、戻るボタンを押すと、スタックがクリアされたときにアプリを終了します。 ..

問題が解決しない場合はお知らせください...

于 2012-09-13T09:42:47.393 に答える
11

少し古い質問ですが、同じような問題の答えを探しているときに、誰か他の人がそれに遭遇するかもしれません。

フラグを使用してログインアクティビティを開始する必要があります。-Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASKフラグNEW_TASKには少し紛らわしい名前が付いている場合がありますが、フラグが存在しない場合でも実際には新しいタスクが作成されます(そうでない場合は現在のタスクが使用されます)-CLEAR_TASK以前のすべてのアクティビティからフラグがクリアされます。

于 2014-02-04T13:18:35.360 に答える
2

これを試して、

現在のアクティビティを終了します

     YourCurrentActivity.this.finish();  
     Intent intent1 = new Intent(YourCurrentActivity.this,LoginActivity.class);  
     intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
     startActivity(intent1); 

アクティビティがスタックにない場合でも機能します。

それが役に立てば幸い。

于 2012-09-13T09:49:09.137 に答える
0

onActivityResult()を使用して、このシナリオのアクティビティを管理します。

于 2012-09-13T09:43:08.370 に答える