簡體   English   中英

在Android項目的AlertDialog中使用TextView的IllegalStateException

[英]IllegalStateException with TextView inside AlertDialog on Android project

我正在研究Android項目。 我有一些問題,我不知道如何解決它。 我發現了類似的主題,但建議的解決方案沒有幫助。

在我點擊按鈕以獲得Dialog(內置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層次結構中 - 如果它已經存在於您的活動,片段或其他對話框中,則無法重復使用它。

一個選項是創建一個新的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());
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM