Android 连续启动两个对话框,一个接一个
我对Android的Java编程非常陌生,我可能错过了一个让我不能做我想做的事情的步骤 基本上,我想启动两个对话框,一个接一个。换句话说:当第一个关闭时,我希望第二个打开 您将了解它的用途: 我有一个活动,有两个字段:主电话号码和主邮件地址。我正在使用一个ContactPicker活动,该活动做得很好,并为我带回正确的ID。当联系人有多个电话号码时,我会打开一个AlertDialog,向其中传递号码列表,并让用户选择主号码。在更新了正确的字段之后,我想启动第二个字段,让用户选择主邮件地址。 问题是:我找不到任何事件来触发新的AlertDialog: 现在,我已经尝试了:activityonresume,Dialog onDismiss,但是没有成功,第一个似乎是正常的,第二个可能是错误地使用了AlertDialog的调用 我在论坛上读到,一个好的做法是使用新的活动。在我看来,显示一张单子似乎有点贵,但如果我找不到其他答案,我会选择这样做 我能看到的解决方案是: 使用活动和活动结果 在调用活动中使用不可见字段并设置onChange事件,该字段将由第一个AlertDialog窗口修改为触发器 改进我处理AlertDialog的方式,我在ActivityOnResult中调用它,如某个帖子中所示 提出和圈套自制的事件和听众:我不知道我是否能建立一个。 所以,也许我错过了android哲学中的一些东西。你能帮帮我吗 这是一段代码的摘录,多亏了互联网上的代码:Android 连续启动两个对话框,一个接一个,android,events,android-activity,android-alertdialog,lifecycle,Android,Events,Android Activity,Android Alertdialog,Lifecycle,我对Android的Java编程非常陌生,我可能错过了一个让我不能做我想做的事情的步骤 基本上,我想启动两个对话框,一个接一个。换句话说:当第一个关闭时,我希望第二个打开 您将了解它的用途: 我有一个活动,有两个字段:主电话号码和主邮件地址。我正在使用一个ContactPicker活动,该活动做得很好,并为我带回正确的ID。当联系人有多个电话号码时,我会打开一个AlertDialog,向其中传递号码列表,并让用户选择主号码。在更新了正确的字段之后,我想启动第二个字段,让用户选择主邮件地址。 问题
// CATCH ContactPicker Result in order to fetch the contact ID
// and fill the fields
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
CharSequence[] itemsList = null;
MyContactsOperations contact = null; //to get contact's details
String id=null;
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_RESULT:
try {
Uri result = data.getData();
// get the contact id from the Uri
id = result.getLastPathSegment();
} catch (Exception e) {
Log.e(DEBUG_TAG, "Unable to get contact infos", e);
} finally {
setEditTexts(EDIT_PHONE_NUMBER, id); //use the contact's details to fill the choosen field
}
} // END GET PHONE NUMBER
}
}
private void setEditTexts(int editTextIdx, String idContactPicker) {
CharSequence[] itemsList = null;
MyContactsOperations contact = null;
switch (editTextIdx) {
/*
* Get Phone Number from selected contact
*/
case EDIT_PHONE_NUMBER :
try {
contact= new MyContactsOperations();
itemsList = contact.getPhoneNumbers(this.getApplicationContext(), idContactPicker);
} catch (Exception e) {
Log.e(DEBUG_TAG, "Unable to get contact infos", e);
} finally {
if (itemsList[0]!=null) {
if (itemsList.length==1) {
mNumber = itemsList[0].toString();
setPhoneNumber ();
}
else {
//Launch an AlertDialog Box to choose the right phone number
selectFromList(itemsList, EDIT_PHONE_NUMBER, idContactPicker);
}
}
}
break;
case EDIT_EMAIL :
try {
contact= new MyContactsOperations();
itemsList = contact.getEMails(this.getApplicationContext(), idContactPicker);
} catch (Exception e) {
Log.e(DEBUG_TAG, "Unable to get contact infos", e);
} finally {
if (itemsList[0]!=null) {
if (itemsList.length==1) {
mEmail = itemsList[0].toString();
setEMail();
}
else {
//Launch an AlertDialog Box to choose the right phone number
selectFromList(itemsList, EDIT_EMAIL, idContactPicker);
}
}
}
break;
}
}
// Method to display the required AlertDialog Box
public void selectFromList(CharSequence[] list, int typeOfList, String id) {
final CharSequence[] itemsList = list;
final int type = typeOfList;
final String idContactPicker = id;
// build and show a simple dialog that allows the user to select a number
AlertDialog.Builder builder = new AlertDialog.Builder(this);
switch (type) {
case EDIT_PHONE_NUMBER :
builder.setTitle(R.string.tvMultipleMobile);
break;
case EDIT_EMAIL :
builder.setTitle(R.string.tvMultipleeMail);
break;
}
builder.setItems(list, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int itemIdx) {
String uniqueItem = (String) itemsList[itemIdx];
int startOfItemIndex = uniqueItem.indexOf(":");
switch (type) {
case EDIT_PHONE_NUMBER :
mNumber = uniqueItem.substring(startOfItemIndex + 2);
setPhoneNumber ();
setEditTexts(EDIT_EMAIL, idContactPicker);
case EDIT_EMAIL :
mEmail = uniqueItem.substring(startOfItemIndex + 2);
setEMail ();
}
}
});
AlertDialog alert = builder.create();
alert.setOwnerActivity(this);
alert.show();
}
public void setPhoneNumber () {
EditText telEntry = (EditText) findViewById(R.id.editText2);
telEntry.setText(mNumber);
}
public void setEMail () {
EditText mailEntry = (EditText) findViewById(R.id.editText3);
mailEntry.setText(mEmail);
}
// AND I DON'T KNOW WHERE TO CALL : setEditTexts(EDIT_EMAIL, id);
从ContactPicker获取联系人ID
调用该方法向用户建议多个电话号码的列表
构建并显示良好的警报对话框
但我不知道如何为多封电子邮件启动下一个AlertDialog
提前感谢,
eflob你能给我们看一下你尝试过的代码吗?添加到帖子中的代码。谢谢你的帮助。