Андроид:Как закрыть активность переднего плана от активной деятельности?
-
18-09-2019 - |
Вопрос
Я создал приложение, которое асинхронно взаимодействует с сервером.Когда приложение отправляет запрос серверу, создается новый диалог (активность) с уведомлением о «загрузке».Основное действие реализует методы обработки ответов сервера, и я хотел бы закрыть действие переднего плана, когда основное действие получит ответ от сервера.
Диалог уведомлений создается следующим образом:
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
}
}
Я был бы признателен, если бы кто-нибудь мог предложить способ закрыть диалоговое окно уведомления (DlgServerRequest) при выполнении onAuthenticateUser().
Решение
Почему бы не использовать настоящий ProgressDialog
или какой-то другой Dialog
?Тогда все, что вам нужно сделать, это dismissDialog()
, и вы сделали?
Если это неприемлемо, я вижу два основных варианта действий:
- Переместите логику аутентификации в
DlgServerRequest
класс, так что можетfinish()
сам. - Поместите свой экземпляр
DlgServerRequest
класс в статический элемент данных, чтобы ваша основная деятельность могла вызыватьfinish()
в теме
Если вы выберете вариант № 2, очень важно null
извлеките этот статический элемент данных, чтобы избежать утечек памяти.