1

タブ グループ アクティビティを使用するアプリがあります。タブが各アクティビティを開く方法はすべて正常に機能していますが、ユーザーがログアウトすると問題が発生します。ユーザーがログアウトすることを確認するダイアログが表示され、[はい] をクリックすると、セッション サーバー側を強制終了する URL に http 要求が送信され、storepreferences からいくつかの変数がクリアされ、ログイン アクティビティが開始されます。それはすべてうまく機能しますが、ユーザーがその時点でログイン画面にいるときに、ユーザーが反撃すると、ログアウトする前に行っていたアクティビティに戻ります。FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_NO_HISTORY などのフラグを追加しようとしましたが、どれも機能していないようで、それでもヒットして前のアクティビティに戻ることができます。だから私は ログイン画面の onBackPressed メソッドをオーバーライドして、代わりにアプリをバックグラウンドに送るようにしました (moveTaskToBack(true))。それはうまくいったようで、ヒットするとホーム画面に戻りますが、アプリのアイコンをクリックすると、期待したログイン画面ではなく、ユーザーがログアウトする前のアクティビティで再開します。ユーザーがサインアウトすると、以前のすべてのアクティビティがクリアされ、戻ることができずにログインアクティビティが表示されるようにするためのアイデアはありますか? 助けてくれてありがとう!!! ユーザーがサインアウトすると、以前のすべてのアクティビティがクリアされ、戻ることができずにログインアクティビティが表示されるようにするためのアイデアはありますか? 助けてくれてありがとう!!! ユーザーがサインアウトすると、以前のすべてのアクティビティがクリアされ、戻ることができずにログインアクティビティが表示されるようにするためのアイデアはありますか? 助けてくれてありがとう!!!

4

2 に答える 2

1

最小ターゲットがハニカム以上であれば、非常に簡単です。最小値が低い場合は、少し複雑になります。Honeycomb を使用すると、インテントにいくつかのフラグを追加でき、問題なく動作します。より低い API レベルでは、これを行う唯一の保証された方法は、アクティビティを起動し、Intent.FLAG_ACTIVITY_CLEAR_TOPそのアクティビティでログイン アクティビティを起動してから終了することです。

@TargetApi( Build.VERSION_CODES.HONEYCOMB )
private void logout() {

    Intent intent;
    if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {

        intent = new Intent( this, LoginActivity.class );
        intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK );
        startActivity( intent );
        finish();
    }
    else {

        intent = new Intent( this, HomeActivity.class );
        intent.putExtra( "logout", true );
        intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
        startActivity( intent );
        finish();
    }
}

HomeActivity

@Override
protected void onCreate( Bundle savedInstanceState ) {

    super.onCreate( savedInstanceState );
    boolean logout = getIntent().getBooleanExtra( "logout", false );
    if ( logout ) {
        startActivity( new Intent( this, LoginActivity.class ) );
        finish();
        return;
    }
    //...
}
于 2013-05-22T14:01:27.420 に答える
0

Back Press Method を上書きしてみてください。これは、戻るボタンをクリックしたときに消えるようにするためのものです。

@Override
public void onBackPressed() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

または、オプション nohistory を使用してビューにログアウトした後、ビューにリダイレクトできます。これは、新しいアクティビティ ログアウトが定義されている AndroidManifest にこの行を追加することで作成できます。

android:noHistory="true"
于 2013-05-22T13:41:28.023 に答える