0

次のシナリオで何をすべきか教えてもらえますか?Ac1、Ac2、Ac3、Ac4の4つのアクティビティがあり、各アクティビティには[キャンセル]ボタンがあり、押すとAc1に移動します。また、戻るボタンは前のアクティビティに戻る必要があります。Ac1はフローの開始であり、Ac4はフローの終了です。

[キャンセル]ボタンと最後のAc4でFLAG_ACTIVITY_NEW_TASKを使用して、Ac1に戻りました。しかし、これは期待どおりに機能していませんでした。そのため、いずれかのアクティビティで[キャンセル]ボタンが押されたときにアクティビティを停止するブロードキャストレジスタがあります。したがって、ブロードキャストレシーバーを受信したら、finish()を呼び出して、スタックされたアクティビティを閉じます。開発者向けオプションが設定されていない場合は、すべて正常に機能します(アクティビティを保持しないでください)。このオプションを設定すると、1。Ac1がAc2に移動します。2. Ac2は開始されますが、Ac1はクリアされます。3.Ac2がAc3に移動します。4。Ac3が開始され、Ac2がクリアされます。5.キャンセルが呼び出されると、ブロードキャスト受信者が送信されてアクティビティが終了します。6.驚くべきことに、Ac1の代わりにAc2が呼び出されます。Ac2のonCreateが呼び出されているのがわかりました。

私はこの状況を取り除く方法を知りません。誰かがこの状況から私を助けることができますか?

ありがとう

4

4 に答える 4

1

ブロードキャストは少しやり過ぎで、FLAG_ACTIVITY_NEW_TASKはあなたが探しているものではありません。キャンセルボタンでAc1を呼び出してみてくださいintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

于 2013-02-27T16:26:25.597 に答える
1

私が正しく理解していれば、A1からA4まで成長する可能性のある一連のアクティビティをサポートしたいと考えています。ユーザーは、戻るボタンを使用してA(N + 1)からA(N)に戻ることができ、キャンセルボタンを押してスタック全体をA(N)からA2までクリアし、A1のみを残すことができます。

(それがあなたの元の説明よりも明確でない場合は申し訳ありません:-)

私の最初のアプローチはActivity.startActivityForResult、子供の活動を開始するために使用することです。子アクティビティが終了すると(戻るボタン、キャンセルボタン、または通常の終了のいずれかによって)、その子の直接の親は、に返される結果コードを確認しonActivityResult、結果コードがキャンセルを示している場合はそれ自体を終了できます。ボタンが選択されました。

このようなことを試しましたか?

于 2013-02-27T16:40:01.507 に答える
0

私はこのようにします:

class Activity2{

    int KILL_ACTIVITY=555;

    startActivityForResult(new Intent(Activity2.this,Activity3.class), 0);

    @Override onActivityResult(... , int result){
        if(result==KILL_ACTIVITY)
            finish();
    }

}

class Activity3{

    int KILL_ACTIVITY=555;
    @Override onClick(View v){
        if(v.getId()==R.id.button){
            setResult(KILL_ACTIVITY);
            finish();
        }
    }


    startActivityForResult(new Intent(Activity3.this,Activity4.class), 0);

    @Override onActivityResult(... , int result){
        if(result==KILL_ACTIVITY)
            finish();
    }
}
于 2013-02-27T16:38:47.450 に答える
0

キャンセルボタンをac1にリンクしてみてください古いアクティビティスタックをクリアしてac1にジャンプしてみてください

Intent intent  = new Intent(this, ac1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
startActivity(intent);
于 2013-02-27T16:36:07.070 に答える