我正在从事Android项目。我有一些问题,我不知道如何解决。我找到了类似的主题,但是建议的解决方案没有帮助。

在单击按钮以获取对话框(内部带有EditText)后,一切正常。但是,当我第二次去时,我收到了错误消息。

java.lang.IllegalStateException:指定的子代已经有一个父代。您必须先在孩子的父母上调用removeView()。

我的代码

private void MakeDescription()
    {
        try
        {

            DialogInterface.OnClickListener ConfirmProductClickListener = new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which){
                    case DialogInterface.BUTTON_POSITIVE:
                        String url = txtDesc.getText().toString();
                    // txtDesc it's a EditText
                        break;
                    case DialogInterface.BUTTON_NEUTRAL:
                        dialog.cancel();
                        break;
                    }
                }
            };
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(getResources().getString(R.string.app_label3));
            builder.setView(txtDesc).setPositiveButton(getResources().getString(R.string.app_labe1), // txtDesc it's a EditTextConfirmProductClickListener)
            .setNeutralButton(getResources().getString(R.string.app_label2), ConfirmProductClickListener)
            .show();

        }
        catch (Exception exc)
        {
            Log.e("ex", exc.toString());
        }
    }

最佳答案

例外非常明确,txtDesc已经在View层次结构中-如果您的活动,片段或其他对话框中已经存在txtDesc,则无法重复使用。

一种选择是创建一个新的EditText视图:

try
    {
        final EditText editText = new EditText(this);
        DialogInterface.OnClickListener ConfirmProductClickListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which){
                case DialogInterface.BUTTON_POSITIVE:
                    String url = editText.getText().toString();
                    break;
                case DialogInterface.BUTTON_NEUTRAL:
                    dialog.cancel();
                    break;
                }
            }
        };
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(getResources().getString(R.string.app_label3));
        builder.setView(editText).setPositiveButton(getResources().getString(R.string.app_labe1), // txtDesc it's a EditTextConfirmProductClickListener)
        .setNeutralButton(getResources().getString(R.string.app_label2), ConfirmProductClickListener)
        .show();

    }
    catch (Exception exc)
    {
        Log.e("ex", exc.toString());
    }

关于java - IllegalStateException与Android项目上AlertDialog中的TextView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16567637/

10-09 04:27