3

私のメニューにはいくつかのアイテムがあります。ホームは、アプリケーションのルートになりたいアイテムであり、ユーザーがクリックするたびに、Android のスタックがクリアされ、メイン画面に戻ります。

これは私のコードです:

menu.setOnItemClickedListener(new MenuClickedListener() {
            public void eventOccured(int id) {          

                Intent intent = null;
                switch(id) {
                    case 1: intent = new Intent(context, More.class);           break;
                    case 2: intent = new Intent(context, FavoriteScreen.class); break;
                    case 3: intent = new Intent(context, VideoShowList.class);  break;
                    case 4: intent = new Intent(context, ShoppingList.class);   break;
                    case 5: intent = new Intent(context, MainScreen.class); 
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            break;                  
                }       

                if(intent != null)
                    context.startActivity(intent); 
            }
        });

メニューは正常に機能しますが、ホーム画面から 2 番目と 3 番目の画面に移動し、メニューの [ホーム] 項目をクリックしてホーム画面に戻るため、フラグが機能しないようです。今、戻るボタンをクリックすると、3 番目の画面、2 番目の画面、ホーム画面に移動します。

このメニューをウィジェットとして設計したのは、一度セットアップしてすべての画面で再利用できるようにするためです。

任意の提案をいただければ幸いです。ありがとう。

4

6 に答える 6

20

Intent.FLAG_ACTIVITY_CLEAR_TOPを試しましたが、適切な解決策が得られなかったので、最終的にこれが役立ちます


Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);

これにより、すべてのスタックがクリアされ、LoginActivityのみが実行されます

于 2014-04-05T12:39:10.157 に答える
18

一度読んでおけば、flag_activity_clear_top の使い方に問題はありません。

以下は、Flag_Activity_Clear_Top の使用法に関する簡単な説明です。

正しい使用のためのワンライナーフォーミュラ:

呼び出し元のアクティビティと呼び出されたアクティビティの間の中間のアクティビティ (存在する場合) は常にクリアされます。

アクティビティ フローは次のとおりです。

アクティビティ A -> アクティビティ B -> アクティビティ C (D に移動するには、アクティビティ クリア トップを使用します) -> アクティビティ D

上記のシーケンスで、D に到達するときに戻ると、Activity C->Activity B-> Activity A が取得されます。これは、Activity C と Activity D の間に INTERMEDIATE ACTIVITY がないためです。

ここにいる一部の開発者の神話は -

C からフラグ アクティビティ クリア トップを使用してアクティビティ D に到達した後、D から戻るキーを押すと、アプリケーションの外部に移動することを期待していましたが、これは決して起こりません

Flag_Activity_Clear_Top は、常に 2 つのアクティビティ間の中間アクティビティを常にクリアします。

于 2013-07-01T04:30:32.903 に答える
7

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);代わりに これを使用してみてくださいintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    Intent intent = new Intent(getApplicationContext(),
            yourActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    startActivity(intent);
于 2012-08-14T04:21:55.343 に答える
1

私は同じ問題に直面しました。私の問題は、目的のアクティビティに launchMode="singleInstance" があることでした。singleTask に変更され、コードは正常に機能しました。

于 2016-08-31T11:38:03.670 に答える
-3

多分これはうまくいく:

intent = new Intent(getApplicationContext(), MainScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
于 2012-08-14T03:23:42.120 に答える