Ich versuche, meinen Anmeldedialog in meiner Anwendung abzuschließen, und ich habe Probleme mit dem Umgang mit meinen Dialogen.Aufrufen eines Dialogfelds aus einem Dialogfeld
Ich habe drei Dialoge, zuerst einen AlertDialog als Anmeldedialog, zweitens einen progressDialog und einen alertDialog, der eine Fehlermeldung anzeigt. Hier ist mein Code:
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;
}
Wenn ein Benutzer klickt auf „connect“ (positive Taste) ein SOAP-Aufruf erfolgt eine Webservice zu konsumieren, die die Benutzerdaten validiert. Während der Benutzer auf den Anruf wartet, zeigt der Fortschrittsdialog die Arbeit an. Nachdem der Anruf getätigt wurde, sollte der Dialog DIALOG_NO_LOGIN_USER_ID
angezeigt werden, wenn die Benutzerdaten nicht gültig waren. Der Benutzer kann auf OK klicken und der Anmeldedialog wird erneut angezeigt.
Der Dialog DIALOG_NO_LOGIN_USER_ID wird jedoch nicht angezeigt. Ich habe versucht, den showDialog() aufzurufen, nachdem der Thread gestartet wurde, aber dann gibt es Threading-Probleme. Der Dialog wird angezeigt, aber das Ergebnis der Validierung wird ignoriert.
Kann mir jemand helfen zu verstehen, wie man die Dialoge verwaltet? Gibt es eine andere, vielleicht "bessere" Lösung für die Verwendung eines AlertDialogs als Anmeldedialog?
Grüßen, htz
Aber das ist was ich tue ... Ich rufe den nächsten zweiten Dialog in der onClick() Methode des ersten Dialogs auf. Ich erstelle den ersten Dialog und im onClick() wird ein Thread gestartet. Am Ende dieses Threads sollte der nächste Dialog angezeigt werden. Während der Thread läuft, sollte ein Fortschrittdialog angezeigt werden. Können Sie die Context-Sache erklären? Es ist mir nicht klar, warum ich einen speziellen Kontext brauche, um dies zum Laufen zu bringen. Ich benutze bereits den 'activity context' durch Aufruf von' this' – htz
Sie müssen googlen für 'context'. Und wenn Sie es nicht in 'onClick' wollen und es nur dann wollen, wenn der Dialog geschlossen wird, dann können Sie' OnDismissListener' in Ihrem Dialog einstellen. – Rajkiran