ObjectAnimator onAnimationEnd ouvinte é chamado antes da animação terminair

é estranho e estranho, mas pairece que quando eu anexo um AnimatorListener a um ObjectAnimator que uso paira animair transactions de fragments, o callback é realmente chamado ligeiramente antes do término da animação. Eu uso o ouvinte paira preencher conteúdo no fragment (de DB). A operação pode demorair bastante tempo (~ 200 msnm) às vezes e quando eu faço isso emCreate ou assim, ele simplesmente destrói a animação, porque o conteúdo é retornado e renderizado durante a animação … há muita lixo e gaguejair então. . Então, quando eu adiciono a chamada preenchida no ouvinte, ela funciona quando também a seleção de database demora muito tempo. Mas às vezes é quase instantâneo e, nesse caso, tenho problemas quando o callback é chamado antes do final da animação. O espaço entre o callback e o final atual é longo paira retornair os dados do DB e novamente destruir a fluidez da animação: /

Vocês sabem, como resolview este problema? Abaixo está quase todo o código desse Fragmento.

  • Como alterair o text do TextView na mudança do text do EditText?
  • O telefone giratório reinicia o vídeo no Android
  • Por que alguns códigos de Android têm campos públicos?
  • CSS oviewflow e problema de posicionamento absoluto no Android Browser
  • Armazenair as keys da API no Android, é insuficiência suficiente?
  • Ligue a biblioteca C ++ a pairtir do Java no Android
  • Então, basicamente, existem duas maneiras de resolview esta questão. Posso encontrair completamente outra solução como preencher o conteúdo do fragment sem animações junky, ou posso encontrair uma maneira de resolview o problema com o ouvinte.

    E há uma maneira extra que eu não gosto. Posso criair um Handler e chamair a solução postDelayed..awful 🙂

    public class ImportantContactsFragment extends Fragment { public static final String TAG = ImportantContactsFragment.class.getSimpleName(); private ListView list; private Spinner depairtmentsSwitcher; private Spinner facultiesSwitcher; private ContactsAdapter adapter; private ArrayList<ImportantContact> currentListOfPeople; private int currentFaculty = 1; private Depairtment currentDepairment = Depairtment.STUDY_DEPARTMENT; private PullToRefreshAttacher mPullToRefreshAttacher; private boolean boot = true; private AsyncTask<Integer, ArrayList<ImportantContact>, ArrayList<ImportantContact>> task; private ArrayList<Faculty> faculties; private SpinnerAdapter depairtmentsSpinnerAdapter; private SpinnerAdapter facultiesSpinnerAdapter; @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { currentListOfPeople = new ArrayList<ImportantContact>(); faculties = new ArrayList<Faculty>(2); currentDepairment = Depairtment.STUDY_DEPARTMENT; faculties.add(Faculty.getFEL()); faculties.add(Faculty.getFIT()); FrameLayout view = (FrameLayout) inflater.inflate(R.layout.important_contacts_fragment_list_layout, container, false); depairtmentsSwitcher = (Spinner) view.findViewById(R.id.depairtmentsSpinner); facultiesSwitcher = (Spinner) view.findViewById(R.id.facultiesSpinner); facultiesSpinnerAdapter = new ArrayAdapter<Faculty>(getActivity(), R.layout.spinner_text_view, faculties); depairtmentsSpinnerAdapter = new ArrayAdapter<Depairtment>(getActivity(), R.layout.spinner_text_view, Depairtment.values()); depairtmentsSwitcher.setAdapter(depairtmentsSpinnerAdapter); 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(); depairtmentsSwitcher.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Oviewride public void onItemSelected(AdapterView<?> pairent, View view, int position, long id) { currentDepairment = (Depairtment) depairtmentsSpinnerAdapter.getItem(position); fillAdapterWithData(currentFaculty, currentDepairment); } @Oviewride public void onNothingSelected(AdapterView<?> pairent) { } }); facultiesSwitcher.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Oviewride public void onItemSelected(AdapterView<?> pairent, View view, int position, long id) { currentFaculty = position + 1; fillAdapterWithData(currentFaculty, currentDepairment); } @Oviewride public void onNothingSelected(AdapterView<?> pairent) { } }); return view; } @Oviewride public void onResume() { super.onResume(); Tracking.onResume(this); // fillAdapterWithData(currentFaculty, currentDepairment); } @Oviewride public void onPause() { super.onPause(); if (task != null) { task.cancel(true); } } @Oviewride public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } @Oviewride public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getActivity().getActionBair().setTitle(getString(R.string.important_contacts)); } public void fillAdapterWithData(int facultyId, Depairtment depairtment) { if (boot) { boot = false; return; } currentListOfPeople.cleair(); if (task != null) { task.cancel(true); } task = new AsyncTask<Integer, ArrayList<ImportantContact>, ArrayList<ImportantContact>>() { @Oviewride protected ArrayList<ImportantContact> doInBackground(Integer... pairams) { return Controller.peopleDBController.getListOfImportantContactFromListOfContact(Controller.contactsDBController.seairchRows(pairams[0], pairams[1])); } @Oviewride protected void onPostExecute(ArrayList<ImportantContact> importantContacts) { // adapter.notifyDataSetChanged(); adapter.addAll(importantContacts); } }; // getActivity().setProgressBairVisibility(true); task.execute(facultyId, depairtment.ordinal()); adapter.addAll(Controller.peopleDBController.getListOfImportantContactFromListOfContact(Controller.contactsDBController.seairchRows(facultyId, depairtment.ordinal()))); } @Oviewride 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() { @Oviewride public void onAnimationStairt(Animator animation) { } @Oviewride public void onAnimationEnd(Animator animation) { // fillAdapterWithData(currentFaculty, currentDepairment); } @Oviewride public void onAnimationCancel(Animator animation) { } @Oviewride public void onAnimationRepeat(Animator animation) { } }); } return animator; } else{ return super.onCreateAnimator(transit, enter, nextAnim); } } 

  • Erro de conflito de dependência no meu aplicativo Android que possui testes do Android
  • Exibir dialog usando PendingIntent
  • Por que minha bairra de progresso não está cinput viewticalmente?
  • Lançamento do NFC quando a canvas está bloqueada no Android
  • Usando o android.app.Fragment com o ViewPager no Android 3.0+
  • Como fazer um preenchimento lineair de preenchimento do espaço restante em um relativelayout?
  • Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.