2017-01-26 3 views
1

Я делаю ALert Dialog с пользовательским полем EditText.Как удалить вид из AlertDialog Android

Я сделал переменную View, а затем связал ее с моим обычным полем EditText.

requestView = inflater.inflate(R.layout.send_request,null); 

Затем я добавил, что вид на мой AlertDialog

alert.setView(requestView); 

И после этого я добавил метод OnClick To My Button для выполнения предупреждения Dialog действия ..

chatRequestbtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       alert.setPositiveButton("Send", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

         request = requestMsg.getText().toString(); 

         send(); 

        } 
       }); 
       alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 

        } 
       }); 

       alert.show(); 

      } 
     }); 

Он работал правильно. Но после нажатия опции отмены в диалоговом окне предупреждения, когда я снова нажимаю кнопку, чтобы выполнить опцию диалога оповещения.

Он падает со следующей ошибкой.

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
                      at android.view.ViewGroup.addViewInner(ViewGroup.java:4417) 
                      at android.view.ViewGroup.addView(ViewGroup.java:4258) 
                      at android.view.ViewGroup.addView(ViewGroup.java:4230) 
                      at android.support.v7.app.AlertController.setupCustomContent(AlertController.java:647) 
                      at android.support.v7.app.AlertController.setupView(AlertController.java:463) 
                      at android.support.v7.app.AlertController.installContent(AlertController.java:226) 
                      at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:257) 
                      at android.app.Dialog.dispatchOnCreate(Dialog.java:395) 
                      at android.app.Dialog.show(Dialog.java:294) 
                      at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:955) 
                      at com.buckydroid.anonchat.User$3.onClick(User.java:86) 
                      at android.view.View.performClick(View.java:5637) 
                      at android.view.View$PerformClick.run(View.java:22433) 
                      at android.os.Handler.handleCallback(Handler.java:751) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6126) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

я, хотя делает вид утратившим добавив вид снова при нажатии на кнопку будет решить проблему. Но та же проблема снова и снова ..

+0

Не могли бы вы представить пример кода, как вы создаете и показываете AlertDialog? – Grimmy

+0

AlertDialog.Builder alert = new AlertDialog.Builder (this); @Grimmy – Doge

+0

Вы воссоздаете его каждый раз, когда вы показываете диалог? – Grimmy

ответ

2

Ваша проблема здесь:

AlertDialog.Builder alert = new AlertDialog.Builder(this); 
alert.setView(requestView); 

В этом случае alert не диалог, а строитель. Поэтому каждый раз, когда вы пытаетесь это показать, он восстанавливает это диалоговое окно и пытается добавить то же самое для просмотра - requestView. Потому что он кэшируется в построителе. Чтобы исправить это - переместите

requestView = inflater.inflate(R.layout.send_request,null); 
alert.setView(requestView); 

в ваш метод OnClick, где вы показываете диалог. Таким образом, это должно выглядеть так:

chatRequestbtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       requestView = inflater.inflate(R.layout.send_request,null); 
       alert.setView(requestView); 

       alert.setPositiveButton("Send", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

         request = requestMsg.getText().toString(); 

         send(); 

        } 
       }); 
       alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 

        } 
       }); 

       alert.show(); 

      } 
     }); 
+0

Большое вам спасибо :) – Doge

+1

@ Додж, пожалуйста!) – Grimmy

Смежные вопросы