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
Post a Comment