android - IllegalStateException in Fragment Activity -


i have fragmentactivity class represents customer information; inside class, have 2 inner classes fragment , fragment adapter. below code:

public class customerinfofragmentactivity extends fragmentactivity implements     onclicklistener, onitemselectedlistener, oncheckedchangelistener, onseekbarchangelistener,     onpagechangelistener { public static final string  form_name       = "customer information"; private static final string tag             = "customerinfofragmentactivity"; private static final int    time_dialog_id  = 0; private static final int    date_dialog_id  = 1; // no. of pages loaded in pager; make sure accurate private static int          page_count      = 4; private serverservice       serverservice; // form entry date calendar                    formdate; // layout view containing navigation bar , buttons linearlayout                navigatorlayout; button                      firstbutton; button                      lastbutton; button                      formdatebutton; button                      savebutton; button                      clearbutton; seekbar                     navigationseekbar; // view pager holds pages generated dynamically viewpager                   pager; // views displayed in pages, sorted w.r.t. appearance on pager textview                    phone1textview; edittext                    phone1; textview                    phone1ownertextview; checkbox                    phone1owner; edittext                    phone1ownername; textview                    phone2textview; edittext                    phone2; textview                    phone2ownertextview; checkbox                    phone2owner; edittext                    phone2ownername; textview                    address; edittext                    address1; edittext                    address2; edittext                    landmark; edittext                    town; edittext                    patientid; button                      scanbarcode; // arraylist hold linear layouts - 1 each page arraylist<viewgroup>        groups; view[]                      views;  class customerinfofragment extends fragment {     int currentpage;      @override     public void oncreate (bundle savedinstancestate)     {         super.oncreate (savedinstancestate);         bundle data = getarguments ();         currentpage = data.getint ("current_page", 0);     }      @override     public view oncreateview (layoutinflater inflater, viewgroup container, bundle savedinstancestate)     {         // return layout of views pre-filled arraylist of groups         if (currentpage != 0 && groups.size () != 0)             return groups.get (currentpage - 1);         else             return null;     } }  class customerinfofragmentpageradapter extends fragmentpageradapter {     /** constructor of class */     public customerinfofragmentpageradapter (fragmentmanager fragmentmanager)     {         super (fragmentmanager);     }      /** method invoked when page requested create */     @override     public fragment getitem (int arg0)     {         customerinfofragment fragment = new customerinfofragment ();         bundle data = new bundle ();         data.putint ("current_page", arg0 + 1);         fragment.setarguments (data);         return fragment;     }      /** returns number of pages */     @override     public int getcount ()     {         return page_count;     } }  @override protected void oncreate (bundle savedinstancestate) {     super.oncreate (savedinstancestate);     setcontentview (r.layout.template);     serverservice = new serverservice (getapplicationcontext ());     formdate = calendar.getinstance ();     createviews (this);     initview (views);     updatedisplay (); }  public void createviews (context context) {     // create fixed views     formdatebutton = (button) findviewbyid (r.template_id.formdate);     firstbutton = (button) findviewbyid (r.template_id.firstbutton);     lastbutton = (button) findviewbyid (r.template_id.lastbutton);     clearbutton = (button) findviewbyid (r.template_id.clearbutton);     savebutton = (button) findviewbyid (r.template_id.savebutton);     navigationseekbar = (seekbar) findviewbyid (r.template_id.navigationseekbar);     pager = (viewpager) findviewbyid (r.template_id.pager);     navigationseekbar.setmax (page_count - 1);     navigatorlayout = (linearlayout) findviewbyid (r.template_id.navigatorlayout);     // if form consists of single page, hide     // navigatorlayout     if (page_count < 2)     {         navigatorlayout.setvisibility (linearlayout.gone);     }     fragmentmanager fragmentmanager = getsupportfragmentmanager ();     customerinfofragmentpageradapter pageradapter = new customerinfofragmentpageradapter (fragmentmanager);     pager.setadapter (pageradapter);     // create views pages     phone1textview = new textview (context);     phone1 = new edittext (context);     phone1ownertextview = new textview (context);     phone1owner = new checkbox (context);     phone1ownername = new edittext (context);     phone2textview = new textview (context);     phone2 = new edittext (context);     phone2ownertextview = new textview (context);     phone2owner = new checkbox (context);     phone2ownername = new edittext (context);     address = new textview (context);     address1 = new edittext (context);     address2 = new edittext (context);     landmark = new edittext (context);     town = new edittext (context);     patientid = new edittext (context);     scanbarcode = new button (context);     phone1textview.settext (r.string.primary_phone);     phone1textview.settextappearance (context, r.style.text);     phone1.settag (r.string.primary_phone);     phone1.sethint (r.string.primary_phone_hint);     phone1.setinputtype (inputtype.type_class_phone);     phone1.settextappearance (context, r.style.text);     phone1owner.settext (r.string.self_owned);     phone1owner.setchecked (true);     phone1ownername.settag (r.string.owner_name);     phone1ownername.sethint (r.string.owner_name_hint);     phone1ownername.setvisibility (edittext.gone);     phone2textview.settext (r.string.secondary_phone);     phone2textview.settextappearance (context, r.style.text);     phone2.settag (r.string.secondary_phone);     phone2.sethint (r.string.secondary_phone_hint);     phone2.setinputtype (inputtype.type_class_phone);     phone2.settextappearance (context, r.style.text);     phone2owner.settext (r.string.self_owned);     phone2owner.setchecked (true);     phone2ownername.settag (r.string.secondary_phone);     phone2ownername.sethint (r.string.owner_name_hint);     phone2ownername.setvisibility (edittext.gone);     address.settext (r.string.address);     address.settextappearance (context, r.style.text);     address1.settag (r.string.address1);     address1.settextappearance (context, r.style.text);     address1.sethint (r.string.address1_hint);     address2.settag (r.string.address2);     address2.settextappearance (context, r.style.text);     address2.sethint (r.string.address2_hint);     landmark.settag (r.string.landmark);     landmark.settextappearance (context, r.style.text);     landmark.sethint (r.string.landmark_hint);     town.settag (r.string.town);     town.settextappearance (context, r.style.text);     town.sethint (r.string.town_hint);     town.settext (app.getcity ());     patientid.settag (r.string.patient_id);     patientid.sethint (r.string.patient_id_hint);     patientid.settextappearance (context, r.style.text);     patientid.setinputtype (inputtype.type_class_number);     scanbarcode.settext (r.string.scan_barcode);     scanbarcode.settextappearance (context, r.style.text);     scanbarcode.setcompounddrawables (getresources ().getdrawable (r.drawable.barcode), null, null, null);     // create layouts , store in arraylist     groups = new arraylist<viewgroup> ();     linearlayout layout = new linearlayout (context);     layout.setorientation (linearlayout.vertical);     layout.addview (phone1textview);     layout.addview (phone1);     layout.addview (phone1owner);     layout.addview (phone1ownername);     groups.add (layout);      linearlayout layout2 = new linearlayout (context);     layout2.setorientation (linearlayout.vertical);     layout2.addview (phone2textview);     layout2.addview (phone2);     layout2.addview (phone2owner);     layout2.addview (phone2ownername);     groups.add (layout2);      linearlayout layout3 = new linearlayout (context);     layout3.setorientation (linearlayout.vertical);     layout3.addview (address);     layout3.addview (address1);     layout3.addview (address2);     layout3.addview (landmark);     layout3.addview (town);     groups.add (layout3);      linearlayout layout4 = new linearlayout (context);     layout4.setorientation (linearlayout.vertical);     layout4.addview (patientid);     layout4.addview (scanbarcode);     groups.add (layout4);      // set event listeners     formdatebutton.setonclicklistener (this);     firstbutton.setonclicklistener (this);     lastbutton.setonclicklistener (this);     clearbutton.setonclicklistener (this);     savebutton.setonclicklistener (this);     scanbarcode.setonclicklistener (this);     navigationseekbar.setonseekbarchangelistener (this);     views = new view[] {phone1owner, phone2owner};     (view v : views)     {         if (v instanceof spinner)         {             ((spinner) v).setonitemselectedlistener (this);         }         else if (v instanceof checkbox)         {             ((checkbox) v).setoncheckedchangelistener (this);         }     }     pager.setonpagechangelistener (this); }  public void initview (view[] views) {     (view v : views)     {         if (v instanceof spinner)         {             ((spinner) v).setselection (0);         }         else if (v instanceof edittext)         {             ((edittext) v).settext ("");         }     }     gotopage (0); }  public void updatedisplay () {     formdatebutton.settext (dateformat.format ("dd-mmm-yyyy", formdate)); }  public void gotofirstpage () {     gotopage (0); }  public void gotolastpage () {     gotopage (page_count - 1); }  private void gotopage (int pageno) {     pager.setcurrentitem (pageno);     navigationseekbar.setprogress (pageno); }  @override public void onprogresschanged (seekbar seekbar, int progress, boolean isbyuser) {     // move page @ index of progress     if (isbyuser)         pager.setcurrentitem (progress); }  @override public void onpageselected (int pageno) {     gotopage (pageno); } } 

the problem appears when swipe pages, when going first page last, have no problems, 1 step throws me illegalstateexception, suggesting child has parent. here exception:

05-03 14:21:36.713: e/androidruntime(944): fatal exception: main 05-03 14:21:36.713: e/androidruntime(944): java.lang.illegalstateexception: specified child has parent. must call removeview() on child's parent first. 05-03 14:21:36.713: e/androidruntime(944):  @ android.view.viewgroup.addviewinner(viewgroup.java:1976) 05-03 14:21:36.713: e/androidruntime(944):  @ android.view.viewgroup.addview(viewgroup.java:1871) 05-03 14:21:36.713: e/androidruntime(944):  @ android.view.viewgroup.addview(viewgroup.java:1828) 05-03 14:21:36.713: e/androidruntime(944):  @ android.view.viewgroup.addview(viewgroup.java:1808) 05-03 14:21:36.713: e/androidruntime(944):  @ android.support.v4.app.nosavestateframelayout.wrap(nosavestateframelayout.java:40) 

on debugging, found out oncreateview(...) method customerfragment being called twice @ first , not @ all, when swipe last page. i'm not quite mature in android development, pardon me if i'm doing stupid...

my problem got solved after having deep @ how fragments , viewpages work. added following line in code , problem resolved:

pager.setoffscreenpagelimit(page_count); 

Comments

Popular posts from this blog

php - Why I am getting the Error "Commands out of sync; you can't run this command now" -

linux - Does gcc have any options to add version info in ELF binary file? -

java - Are there any classes that implement javax.persistence.Parameter<T>? -