【问题标题】:IllegalStateException with TextView inside AlertDialog on Android projectAndroid项目的AlertDialog中带有TextView的IllegalStateException
【发布时间】:2013-05-15 22:27:15
【问题描述】:

我正在开发 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());
        }
    }

【问题讨论】:

    标签: java android android-alertdialog


    【解决方案1】:

    异常非常具体,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());
        }
    

    【讨论】:

    • 好的,谢谢。我正在创建新的 EditText 并解决了问题。
    猜你喜欢
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2014-05-30
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多