MaterialAlertDialog из-за .show создаёт второй такой же объект и вылезает ошибка remove предыдущий View

Создаю диалог по кнопке:

public void SelectClick(View view) {
    MaterialAlertDialogBuilder alertFindWindow = new MaterialAlertDialogBuilder(this);
    alertFindWindow.setView(viewAlertDialog); 
    ...
    alertFindWindow.show();
}

Каждый второй запуск по кнопке крашит прогу.
Пытался:

  1. В методе onDestroy() и в самом click-методе вызвать removeView() - такой функции нет.
  2. Через оператор if, если dialog == null говорит что он всегда false, если dialog != null говорит что он всегда true
  3. Создавал MaterialAlertDialogBuilder alertFindWindow = new MaterialAlertDialogBuilder(this); отдельно от кнопки, т.е. оставляя в кнопке только .show

Вся беда в .show, она создает новый объект диалога, а старый так и остается за кадром. Как решить эту проблему?

Logcat:

Process: com.example.findsku, PID: 14948
java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.view.View$DeclaredOnClickListener.onClick(View.java:6084)
    at android.view.View.performClick(View.java:7352)
    at android.view.View.performClickInternal(View.java:7318)
    at android.view.View.access$3200(View.java:846)
    at android.view.View$PerformClick.run(View.java:27800)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7050)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at android.view.View$DeclaredOnClickListener.onClick(View.java:6079)
    at android.view.View.performClick(View.java:7352) 
    at android.view.View.performClickInternal(View.java:7318) 
    at android.view.View.access$3200(View.java:846) 
    at android.view.View$PerformClick.run(View.java:27800) 
    at android.os.Handler.handleCallback(Handler.java:873) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7050) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965) 
 Caused by: 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:5259)
    at android.view.ViewGroup.addView(ViewGroup.java:5090)
    at android.view.ViewGroup.addView(ViewGroup.java:5062)
    at androidx.appcompat.app.AlertController.setupCustomContent(AlertController.java:657)
    at androidx.appcompat.app.AlertController.setupView(AlertController.java:475)
    at androidx.appcompat.app.AlertController.installContent(AlertController.java:233)
    at androidx.appcompat.app.AlertDialog.onCreate(AlertDialog.java:279)
    at android.app.Dialog.dispatchOnCreate(Dialog.java:550)
    at android.app.Dialog.show(Dialog.java:391)
    at androidx.appcompat.app.AlertDialog$Builder.show(AlertDialog.java:1009)
    at com.example.findsku.MainActivity.SelectClick(MainActivity.java:125)
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.view.View$DeclaredOnClickListener.onClick(View.java:6079) 
    at android.view.View.performClick(View.java:7352) 
    at android.view.View.performClickInternal(View.java:7318) 
    at android.view.View.access$3200(View.java:846) 
    at android.view.View$PerformClick.run(View.java:27800) 
    at android.os.Handler.handleCallback(Handler.java:873) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7050) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965) 

Ответы (1 шт):

Автор решения: ЮрийСПб

Из ошибки следует, что нельзя добавить вьюху куда-то, если она уже куда-то добавлена.

В вашем случае проще всего будет убрать вашу вьюху из переменных класса и сделать её локальной переменной метода. Тогда каждый клик будет новый экземпляр вьюхи и проблема будет решена.

→ Ссылка