android - ObjectAnimator onAnimationEnd listener is called before the animation finishes -


its weird , strange, seems when attach animatorlistener objectanimator use animating fragment transactions, callback gets called before finish of animation. use listener populate content fragment (from db). operation take quite long time (~200ms) , when in oncreate or so, destroys animation, because content returned , rendered during animation...there lot of junk , stutter then.. when add populate call listener works when db select takes long time. it's instantaneous , in case have problem when callback called before end of animation. gap between callback , actuall end long enaugh return data db , again destroy fluidness of animation:/

do guys know, how solve issue? below whole code of fragment.

so basicaly there 2 ways how solve issue..i can find solution how populate content fragment without junky animations, or can find way how solve problem listener.

and there 1 way dont like. can create handler , call postdelayed..awful solution:)

public class importantcontactsfragment extends fragment {  public static final string tag = importantcontactsfragment.class.getsimplename();   private listview list; private spinner departmentsswitcher; private spinner facultiesswitcher; private contactsadapter adapter; private arraylist<importantcontact> currentlistofpeople; private int currentfaculty = 1; private department currentdeparment = department.study_department; private pulltorefreshattacher mpulltorefreshattacher; private boolean boot = true; private asynctask<integer, arraylist<importantcontact>, arraylist<importantcontact>> task;   private arraylist<faculty> faculties;   private spinneradapter departmentsspinneradapter; private spinneradapter facultiesspinneradapter;  @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {     currentlistofpeople = new arraylist<importantcontact>();     faculties = new arraylist<faculty>(2);     currentdeparment = department.study_department;      faculties.add(faculty.getfel());     faculties.add(faculty.getfit());      framelayout view = (framelayout) inflater.inflate(r.layout.important_contacts_fragment_list_layout, container, false);     departmentsswitcher = (spinner) view.findviewbyid(r.id.departmentsspinner);     facultiesswitcher = (spinner) view.findviewbyid(r.id.facultiesspinner);       facultiesspinneradapter = new arrayadapter<faculty>(getactivity(), r.layout.spinner_text_view, faculties);     departmentsspinneradapter = new arrayadapter<department>(getactivity(), r.layout.spinner_text_view, department.values());       departmentsswitcher.setadapter(departmentsspinneradapter);     facultiesswitcher.setadapter(facultiesspinneradapter);      list = (listview) view.findviewbyid(r.id.list);     adapter = new contactsadapter(getactivity(), r.layout.important_contacts_list_item, currentlistofpeople, list);     list.setadapter(adapter);     list.requestfocus();     departmentsswitcher.setonitemselectedlistener(new adapterview.onitemselectedlistener() {         @override         public void onitemselected(adapterview<?> parent, view view, int position, long id) {             currentdeparment = (department) departmentsspinneradapter.getitem(position);             filladapterwithdata(currentfaculty, currentdeparment);         }          @override         public void onnothingselected(adapterview<?> parent) {         }     });     facultiesswitcher.setonitemselectedlistener(new adapterview.onitemselectedlistener() {         @override         public void onitemselected(adapterview<?> parent, view view, int position, long id) {             currentfaculty = position + 1;             filladapterwithdata(currentfaculty, currentdeparment);         }          @override         public void onnothingselected(adapterview<?> parent) {          }     });      return view; }   @override public void onresume() {     super.onresume();     tracking.onresume(this); //        filladapterwithdata(currentfaculty, currentdeparment);  }  @override public void onpause() {     super.onpause();     if (task != null) {         task.cancel(true);     } }   @override public void onviewcreated(view view, bundle savedinstancestate) {     super.onviewcreated(view, savedinstancestate);     }  @override public void onactivitycreated(bundle savedinstancestate) {     super.onactivitycreated(savedinstancestate);     getactivity().getactionbar().settitle(getstring(r.string.important_contacts)); }  public void filladapterwithdata(int facultyid, department department) {     if (boot) {         boot = false;         return;     }     currentlistofpeople.clear();     if (task != null) {         task.cancel(true);     }     task = new asynctask<integer, arraylist<importantcontact>, arraylist<importantcontact>>() {         @override         protected arraylist<importantcontact> doinbackground(integer... params) {             return controller.peopledbcontroller.getlistofimportantcontactfromlistofcontact(controller.contactsdbcontroller.searchrows(params[0], params[1]));         }           @override         protected void onpostexecute(arraylist<importantcontact> importantcontacts) {  //          adapter.notifydatasetchanged();             adapter.addall(importantcontacts);           }     }; //        getactivity().setprogressbarvisibility(true);      task.execute(facultyid, department.ordinal());     adapter.addall(controller.peopledbcontroller.getlistofimportantcontactfromlistofcontact(controller.contactsdbcontroller.searchrows(facultyid, department.ordinal())));  }  @override public animator oncreateanimator(int transit, boolean enter, int nextanim) {     if(enter){         animator animator = animatorinflater.loadanimator(getactivity(), r.anim.fragment_slide_anim);         if(animator!=null){         animator.addlistener(new animator.animatorlistener() {             @override             public void onanimationstart(animator animation) {              }              @override             public void onanimationend(animator animation) { //                    filladapterwithdata(currentfaculty, currentdeparment);             }              @override             public void onanimationcancel(animator animation) {              }              @override             public void onanimationrepeat(animator animation) {              }         });         }         return  animator;     }     else{         return super.oncreateanimator(transit, enter, nextanim);     }    } 


Comments

Popular posts from this blog

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

html - How to style widget with post count different than without post count -

url rewriting - How to redirect a http POST with urlrewritefilter -