So i have a button that displays an alert dialog when its clicked. I create the view for the alert dialog in the onCreate method of my activity. The code for that is right here:
LayoutInflater factory = LayoutInflater.from(this);
view = factory.inflate(R.layout.grade_result, null);
When i push the button for the first time, the dialog displays the way i want it, but when i push it a second time it throws this exception
11-28 00:35:58.066: E/AndroidRuntime(30348): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
My code for the method that displays the AlertDialog when the button is pushed is right here:
public void details(View v){
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setView(view);
alert.setMessage("Details About Your Grades")
.setCancelable(false)
.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
alert.show();
Any help would be appreciated! Thank you!
It says that your "view" was connected to parent. It's happend when you called .setView(view). If i'm right - alertDialog class gives parent for your view. It is basics for android. ViewGroup may have a lot of child View's. I had similar problem. So, you can try this insinde onClick:
It helped me, I hope it'll help you!
Use alert.create(); then alertd.dismiss(); to destroy dialog
Inflating the view that should be set within the Builder of the AlertDialog worked for me :
I had similar issue with alert dialog. First time I inflated a view and second time I wanted to display a message. If you display the alert dialog once then you inflate the view and the dialog is cached. If you display it second time you get the error IllegalStateException:"call removeView() on child's parent first"
I solved this issue by removing the view that I inflated on first click and displayed the message on second click. -remove the view or message every time before you inflate or create a message.
I modified Your code and it work's fine with me.
you can set View to null before setting the view in the dialog.
just like this:
It will always set view to null before setting it again.
Use this :