アンドロイド:アクティブなアクティビティからフォアグラウンド アクティビティを閉じるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1487125

質問

サーバーと非同期通信するアプリケーションを作成しました。アプリケーションがサーバー要求を行うと、「読み込み中」通知を含む新しいダイアログ (アクティビティ) が作成されます。メイン アクティビティはサーバー応答を処理するメソッドを実装しており、メイン アクティビティがサーバーから応答を受信したときにフォアグラウンド アクティビティを閉じたいと考えています。

通知ダイアログは次の方法で作成されます。

 private void showServerRequestDialog(String actionLabel){
    Intent intent = new Intent(this, DlgServerRequest.class);
    intent.putExtra(SERVER_REQUEST_ACTION, actionLabel);
    startActivity(intent);

}

したがって、ユーザーが認証を試みると、次のメソッドが呼び出されます。

private void authenticateUser(String IMEI, String username, String password){
    mEncoderConnection.authenticateRequest(IMEI, username, password);
    showServerRequestDialog("Authenticating...");
}

そして onAuthenticateResponse は認証応答を処理します。

public void onAuthenticateResponse(AuthenticateResponse pkg) {
    //code for response handling
    //TODO: close ServerRequestDialog
    }
}

onAuthenticateUser() の実行時に通知ダイアログ (DlgServerRequest) を閉じる方法を誰かが提案していただければ幸いです。

役に立ちましたか?

解決

なぜ本物を使わないのか ProgressDialog または他のもの Dialog?そうすれば、あなたがする必要があるのは、 dismissDialog(), 、それで終わりですか?

それが受け入れられない場合、私が考えている主な行動は次の 2 つです。

  1. 認証ロジックを DlgServerRequest クラスなので、それができます finish() 自体。
  2. あなたのインスタンスを入れてください DlgServerRequest クラスを静的データメンバーに変換して、メインアクティビティが呼び出せるようにします finish() その上で

オプション #2 を選択した場合、次のことが非常に重要です。 null メモリ リークを避けるために、静的データ メンバーを削除します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top