Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 连续启动两个对话框,一个接一个_Android_Events_Android Activity_Android Alertdialog_Lifecycle - Fatal编程技术网

Android 连续启动两个对话框,一个接一个

Android 连续启动两个对话框,一个接一个,android,events,android-activity,android-alertdialog,lifecycle,Android,Events,Android Activity,Android Alertdialog,Lifecycle,我对Android的Java编程非常陌生,我可能错过了一个让我不能做我想做的事情的步骤 基本上,我想启动两个对话框,一个接一个。换句话说:当第一个关闭时,我希望第二个打开 您将了解它的用途: 我有一个活动,有两个字段:主电话号码和主邮件地址。我正在使用一个ContactPicker活动,该活动做得很好,并为我带回正确的ID。当联系人有多个电话号码时,我会打开一个AlertDialog,向其中传递号码列表,并让用户选择主号码。在更新了正确的字段之后,我想启动第二个字段,让用户选择主邮件地址。 问题

我对Android的Java编程非常陌生,我可能错过了一个让我不能做我想做的事情的步骤

基本上,我想启动两个对话框,一个接一个。换句话说:当第一个关闭时,我希望第二个打开

您将了解它的用途:

我有一个活动,有两个字段:主电话号码和主邮件地址。我正在使用一个ContactPicker活动,该活动做得很好,并为我带回正确的ID。当联系人有多个电话号码时,我会打开一个AlertDialog,向其中传递号码列表,并让用户选择主号码。在更新了正确的字段之后,我想启动第二个字段,让用户选择主邮件地址。 问题是:我找不到任何事件来触发新的AlertDialog:

现在,我已经尝试了:activityonresume,Dialog onDismiss,但是没有成功,第一个似乎是正常的,第二个可能是错误地使用了AlertDialog的调用

我在论坛上读到,一个好的做法是使用新的活动。在我看来,显示一张单子似乎有点贵,但如果我找不到其他答案,我会选择这样做

我能看到的解决方案是:

使用活动和活动结果 在调用活动中使用不可见字段并设置onChange事件,该字段将由第一个AlertDialog窗口修改为触发器 改进我处理AlertDialog的方式,我在ActivityOnResult中调用它,如某个帖子中所示 提出和圈套自制的事件和听众:我不知道我是否能建立一个。 所以,也许我错过了android哲学中的一些东西。你能帮帮我吗

这是一段代码的摘录,多亏了互联网上的代码:

    // 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

你能给我们看一下你尝试过的代码吗?添加到帖子中的代码。谢谢你的帮助。