Я пытаюсь завершить свое диалоговое окно входа в приложение, и у меня проблемы с обработкой моих диалогов.Вызов диалога из диалогового окна
У меня есть три диалоговых окна: сначала AlertDialog в качестве диалогового окна входа в систему, второй - progressDialog и alertDialog, который отображает сообщение об ошибке. Вот мой код:
protected Dialog onCreateDialog(int id) {
switch (id) {
case KBConstants.DIALOG_LOGIN_ID:
TextView textUsername;
TextView textPassword;
TextView textSave;
// Here I build my Layout
...
// return dialog
return new AlertDialog.Builder(this).setTitle(R.string.login_title).setMessage(R.string.login_introduction).setView(loginLayout).setIcon(R.drawable.kreative_barometer_72x72)
.setPositiveButton(R.string.login_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
final DialogInterface d = dialog;
if (checkBoxSave.isChecked()) {
setRememberLogin(true);
} else {
setRememberLogin(false);
}
waitConnect = ProgressDialog.show(KreativBarometerMainView.this, getString(R.string.login_connect_title), getString(R.string.login_connect_introduction), false, true);
Thread t1 = new Thread() {
public void run() {
Looper.prepare();
DataStruct dataStruct = null;
try {
dataStruct = SoapHandler.makeCall(SoapHashMap.CHECK_USER_LOGIN, mainService.getSoapMap(), editUsername.getText().toString(), editPassword.getText().toString(), null, null);
ServerMessageStruct sms = (ServerMessageStruct) dataStruct;
if (sms.getMsgType() == 1) {
mainService.setUserValidation(true);
setLogin(editUsername.getText().toString(), editPassword.getText().toString());
} else {
mainService.setUserValidation(false);
setLogin(null, null);
}
} catch (IOException ioe) {
mainService.setUserValidation(false);
setLogin(null, null);
} catch(XmlPullParserException xmlppe){
} finally{
if(!mainService.isUserValidated()){
waitConnect.dismiss();
showDialog(KBConstants.DIALOG_NO_LOGIN_USER_ID);
}
}
waitConnect.dismiss();
}
};
t1.start();
}
}).setNeutralButton(R.string.login_setup, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* User clicked setup so do some stuff */
startActivity(new Intent(packageContext, SettingView.class));
}
}).setNegativeButton(R.string.login_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* User clicked cancel so do some stuff */
KreativBarometerMainView.this.finish();
}
}).setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
KreativBarometerMainView.this.finish();
}
}).create();
case KBConstants.DIALOG_NO_LOGIN_USER_ID:
return new AlertDialog.Builder(this).setMessage(R.string.login_info_error_user).setIcon(R.drawable.kreative_barometer_72x72).setTitle(R.string.login_error)
.setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
showDialog(KBConstants.DIALOG_LOGIN_ID);
}
}).create();
}
return null;
}
Когда пользователь нажимает на «подключении» (положительная кнопке) вызов SOAP производится потреблять веб-сервис, который проверяет пользовательские данные. Пока пользователь ожидает, что вызов будет выполнен, отображается индикация progressDialog, указывающая на работу. После того, как вызов был выполнен, должен отображаться диалоговое окно DIALOG_NO_LOGIN_USER_ID
, если данные пользователя недействительны. Пользователь может нажать кнопку «ОК», и снова появится диалоговое окно входа в систему.
Диалоговое окно DIALOG_NO_LOGIN_USER_ID не отображается. Я попытался вызвать showDialog() после того, как был запущен Thread, но затем возникают проблемы с потоками. Диалоговое окно отображается, но результат проверки игнорируется.
Может ли кто-нибудь помочь мне понять, как управлять диалоги? Есть ли другое, возможно «лучшее» решение для использования AlertDialog в качестве диалогового окна входа?
С уважением, ХТЗ
Но это то, что я делаю ... Я вызываю следующий диалог в методе onClick() первого диалога. Я создаю первое диалоговое окно и в onClick() запускается поток. В конце этого потока должно быть показано следующее диалоговое окно. Пока поток работает, следует показать прогресс. Можете ли вы объяснить контекст? Мне непонятно, почему мне нужен особый контекст, чтобы заставить это работать. Я уже использую «контекст активности», вызывая 'this' – htz
Вы должны google для' context'. И если вы не хотите этого в 'onClick' и хотите его только тогда, когда диалог отклонен, вы можете установить' OnDismissListener' в свой диалог. – Rajkiran