MaterialAlertDialog из-за .show создаёт второй такой же объект и вылезает ошибка remove предыдущий View
Создаю диалог по кнопке:
public void SelectClick(View view) {
MaterialAlertDialogBuilder alertFindWindow = new MaterialAlertDialogBuilder(this);
alertFindWindow.setView(viewAlertDialog);
...
alertFindWindow.show();
}
Каждый второй запуск по кнопке крашит прогу.
Пытался:
- В методе
onDestroy()и в самом click-методе вызватьremoveView()- такой функции нет. - Через оператор if, если dialog == null говорит что он всегда false, если dialog != null говорит что он всегда true
- Создавал
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 шт):
Автор решения: ЮрийСПб
→ Ссылка
Из ошибки следует, что нельзя добавить вьюху куда-то, если она уже куда-то добавлена.
В вашем случае проще всего будет убрать вашу вьюху из переменных класса и сделать её локальной переменной метода. Тогда каждый клик будет новый экземпляр вьюхи и проблема будет решена.