4

ユーザーがクリックしlogout buttonてもIntentFlag Intent.FLAG_ACTIVITY_NO_HISTORY、運が悪かったのに、アクティビティ履歴スタックをクリアしようとしています。下記の私のシナリオを見てください。

1)ログイン画面(通話終了)

2)最初の画面(終了を呼び出さない)

3)2番目の画面(終了を呼び出さない)

4)3番目の画面(終了を呼び出さない)

5)ログアウト画面(ログイン画面が開き、終了します)

以下のコードを使用して私の目標mを達成するには、

ログイン画面

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,FirstActivity.class);
                startActivity(intent);
                finish();

            }
        });

ログインバックイベント

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

        if (getIntent().getBooleanExtra("EXIT", false)) {
            this.finish();
        }else{
            this.finish();
        }
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

最初の画面

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);

            }
        });

2番目の画面

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(SecondActivity.this,ThirdActivity.class);
                startActivity(intent);

            }
        });

3番目の画面

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(ThirdActivity.this,MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("EXIT", true);
                startActivity(intent);
                finish();

            }
        });

問題は、ログアウトをクリックするとログインアクティビティに移動し、戻るボタンをクリックすると2番目のアクティビティに移動することです。

なぜそれがアクティビティを終了しないのか、second activityそしてスタックを維持している場合はなぜそれが行くのかfirst activity、私が戻ってクリックしたときに代わりに2番目のアクティビティに行く必要があります、私login screenがどのようなものを逃しているのかわかりません。

更新しました

ログイン画面からインテントを呼び出しているときに削除すると、すべて正常に機能finish()しますが、スタックログイン画面を維持したくありません。

あなたの提案は適切です。

4

4 に答える 4

4

あなたはこの質問のためにトリックをすることができます。私はそれを使用しました、そして私とうまく働きます。

あなたのThirdActivityonclick内のコード行の下に書いてください。

btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent=new Intent(ThirdActivity.this,FirstActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.putExtra("GO", false);
            startActivity(intent);
            finish();

        }
    });

FirstActivityクラスのOnCreate内に以下のコードを書き込んだ後:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        // Getting the Value of GO
        GO = getIntent().getExtras().getBoolean("GO");

             if(GO){
        setContentView(R.layout.form_data);
            ...
            // Here your Code for this Activity 
            ...
            }else{
            Intent intent=new Intent(FirstActivity.this,MainActivity.class);
            startActivity(intent);
           finish();
           }
}

また、MainActivityからFirstActivityを以下のように呼び出すときに、GOのExtra値をtrueに設定します。

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,FirstActivity.class);
                 intent.putExtra("GO", true);
                startActivity(intent);
                finish();

            }
        });

それがあなたの問題を解決することを願っています。

于 2013-01-05T08:04:58.653 に答える
3

インテントフラットintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);をに変更しintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);て試してください。私はそれがうまくいき、あなたを助けることを願っています。

Clear Topは、呼び出しているアクティビティがBackStackにある場合にのみ機能します。LoginActivityはBackStackにないため、アクティビティはクリアされません。

android:noHistory="true"LoginActivityを追加してAndroidManifest.xml、試してください。あなたの更新された質問を見た後、私はこの更新を与えています。

于 2013-01-05T07:30:57.460 に答える
0

Third screen

btn.setOnClickListener(new OnClickListener()
   {

        @Override
        public void onClick(View v) 
        {
            Intent intent=new Intent(ThirdActivity.this,MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_TASK_ON_HOME);          
            intent.putExtra("EXIT", true);
            startActivity(intent);
            finish();

        }
    });
于 2013-01-05T07:52:24.807 に答える
-1

とにかく、ついに私は1つの解決策を得ました!これは私の目標を達成し、アクティビティの静的オブジェクトを独自のアクティビティに作成し、object.finish()すべてのアクティビティからログアウトしている間は正常に機能します。

以下は私の目標を達成するための私のトリックです

最初のアクティビティで宣言public static FirstActivity first;し、他のonCreateアクティビティfirst=this; でも同じことを評価し、ログアウトしている間、以下のようにしました。

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent intent = new Intent(ThirdActivity.this,
                        MainActivity.class);
                FirstActivity.first.finish();
                SecondActivity.second.finish();

                startActivity(intent);
                finish();

            }
        });
于 2013-01-05T08:16:09.940 に答える