Android IllegalStateException:当我第二次尝试显示AlertDialog时
我通过设置自定义视图创建了AlertDialog,当我第一次单击显示它时,一切看起来都很好,但第二次我得到了Android IllegalStateException:当我第二次尝试显示AlertDialog时,android,android-layout,android-view,android-alertdialog,illegalstateexception,Android,Android Layout,Android View,Android Alertdialog,Illegalstateexception,我通过设置自定义视图创建了AlertDialog,当我第一次单击显示它时,一切看起来都很好,但第二次我得到了java.lang.IllegalStateException XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
java.lang.IllegalStateException
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/linearLayout"
>
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/logo04"
android:layout_gravity="center"
/>
<!--<view style="@style/Divider" />-->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginLeft="15dp"
android:layout_marginBottom="15dp"
android:text="@string/app_name"
android:textSize="20sp"
android:textColor="@color/black"
/>
<!--<view style="@style/Divider" />-->
<TextView
android:id="@+id/versionCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:textColor="@color/black"
android:textSize="20sp"
/>
<!--<view style="@style/Divider" />-->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/contactUs"
android:textColor="@color/black"
android:textSize="20sp"
android:layout_margin="15dp"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/contactEmail"
android:textColor="@color/black"
android:textSize="20sp"
android:layout_margin="15dp"
android:autoLink="email"
/>
</LinearLayout>
下面是使用
case R.id.about:
if(viewGroup != null){
viewGroup.removeAllViews();
}
AlertDialog.Builder aboutDialog = new AlertDialog.Builder(this);
aboutDialog.setCancelable(true)
.setPositiveButton("OK", null)
.setView(view);
final AlertDialog alertd = aboutDialog.create();
alertd.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:4939)
at android.view.ViewGroup.addView(ViewGroup.java:4770)
at android.view.ViewGroup.addView(ViewGroup.java:4742)
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:403)
at android.app.Dialog.show(Dialog.java:302)
at www.pro_cs_is.com.MainActivity.onNavigationItemSelected(MainActivity.java:547)
at com.google.android.material.navigation.NavigationView$1.onMenuItemSelected(NavigationView.java:174)
at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
at com.google.android.material.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:368)
at android.view.View.performClick(View.java:6311)
at android.view.View$PerformClick.run(View.java:24833)
at android.os.Handler.handleCallback(Handler.java:794)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:173)
at android.app.ActivityThread.main(ActivityThread.java:6653)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821)
我尝试了这篇文章中的大部分解决方案,但不幸的是不起作用从父视图中删除
视图
,并将其重新添加到对话框中。在将视图添加到对话框之前添加以下行
删除
if(view.getParent()!=null)
((ViewGroup)view.getParent()).removeView(view);
您正在将视图重新添加到aboutDialog-->.setView(视图);重新创建视图instance@Ravi是的,我认为这就是问题的原因,所以如果对话框已经有视图,如何从中删除视图呢?
if(view.getParent()!=null)
((ViewGroup)view.getParent()).removeView(view);