내 응용 프로그램에서 로그인 대화 상자를 완성하려고하는데 대화 상자 처리에 문제가 있습니다.대화 상자에서 대화 호출
세 가지 대화 상자가 있습니다. 첫 번째로 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()를 호출하려고했지만 스레드 문제가 발생했습니다. 대화 상자가 표시되지만 유효성 검사의 결과는 무시됩니다.
대화 상자를 관리하는 방법을 쉽게 이해할 수 있습니까? AlertDialog를 로그인 대화 상자로 사용하는 다른 "아마도 좋은"솔루션이 있습니까? 당신이 다른 하나의 내부 대화 상자를 호출 할 필요는 없다 우선
관련, HTZ
하지만이 일은 내가하고있는 일이다 ... 나는 첫 번째 Dialog의 onClick() 메서드에서 다음 두 번째 Dialog를 호출한다. 첫 번째 대화 상자를 만들고 onClick()에서 스레드가 시작됩니다. 이 스레드가 끝나면 다음 대화 상자가 표시됩니다. 스레드가 작동하는 동안 진행 대화 상자가 표시되어야합니다. 문맥을 설명 할 수 있습니까? 왜 이것이 작동하도록 특별한 상황이 필요한지는 분명하지 않습니다. 나는 이미'this '를 호출하여'activity context'를 사용하고 있습니다. – htz
'context'에 대해 google을 사용해야합니다. 그리고 만약 당신이'onClick'에 그것을 원하지 않고 대화 상자가 해제 될 때에 만 그것을 원한다면, 대화 상자에'OnDismissListener'를 설정할 수 있습니다. – Rajkiran