You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AbstractPaginationFragment.java 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package com.luticate.utils.ui.fragments;
  2. import android.animation.Animator;
  3. import android.animation.AnimatorListenerAdapter;
  4. import android.app.Fragment;
  5. import android.os.Build;
  6. import android.os.Bundle;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import com.luticate.utils.business.LuConsumer;
  11. import com.luticate.utils.business.LuPromise;
  12. import com.luticate.utils.dbo.LuDbo;
  13. import com.luticate.utils.dbo.LuPaginatedDbo;
  14. import com.luticate.utils.dbo.LuPromiseError;
  15. import com.luticate.utils.ui.views.AbstractPaginationView;
  16. import java.util.Vector;
  17. /**
  18. * Created by robin on 12/6/15.
  19. */
  20. public abstract class AbstractPaginationFragment<Dbo extends LuDbo> extends Fragment {
  21. protected int _page = 0;
  22. protected int _perPage = 15;
  23. protected int _maxPage = 1;
  24. protected String _query = "";
  25. protected LuPaginatedDbo<Dbo> _items = null;
  26. @Override
  27. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
  28. {
  29. return inflater.inflate(getLayoutId(), container, false);
  30. }
  31. @Override
  32. public void onStart() {
  33. super.onStart();
  34. View v = getView();
  35. AbstractPaginationView paginationView = (AbstractPaginationView) v.findViewById(getPaginationViewId());
  36. paginationView.setOnPageChanged(new LuConsumer<Integer>() {
  37. @Override
  38. public void execute(Integer page) {
  39. loadPage(page);
  40. }
  41. });
  42. if (_items == null) {
  43. loadPage(_page);
  44. }
  45. }
  46. protected void showProgress(final boolean show)
  47. {
  48. View v = getView();
  49. if (!isAdded() || v == null)
  50. return;
  51. final View imagesScrollView = v.findViewById(getScrollViewId());
  52. final View loadingView = v.findViewById(getLoaderViewId());
  53. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
  54. {
  55. int shortAnimTime =
  56. getResources().getInteger(android.R.integer.config_shortAnimTime);
  57. loadingView.setVisibility(View.VISIBLE);
  58. loadingView.animate().setDuration(shortAnimTime).alpha(show ? 1 : 0)
  59. .setListener(new AnimatorListenerAdapter()
  60. {
  61. @Override
  62. public void onAnimationEnd(Animator animation)
  63. {
  64. loadingView.setVisibility(show ? View.VISIBLE : View.GONE);
  65. }
  66. });
  67. imagesScrollView.setVisibility(View.VISIBLE);
  68. imagesScrollView.animate().setDuration(shortAnimTime).alpha(show ? 0 : 1)
  69. .setListener(new AnimatorListenerAdapter()
  70. {
  71. @Override
  72. public void onAnimationEnd(Animator animation)
  73. {
  74. imagesScrollView.setVisibility(show ? View.GONE : View.VISIBLE);
  75. }
  76. });
  77. }
  78. else
  79. {
  80. loadingView.setVisibility(show ? View.VISIBLE : View.GONE);
  81. imagesScrollView.setVisibility(show ? View.GONE : View.VISIBLE);
  82. }
  83. }
  84. public void loadPage(final int page)
  85. {
  86. final View v = getView();
  87. if (!isAdded() || v == null) {
  88. return;
  89. }
  90. showProgress(true);
  91. if (_items != null) {
  92. _items.setData(new Vector<Dbo>());
  93. }
  94. getLoadPagePromise(page, _perPage, _query).then(new LuConsumer<LuPaginatedDbo<Dbo>>() {
  95. @Override
  96. public void execute(LuPaginatedDbo<Dbo> items) {
  97. _items = items;
  98. _page = page;
  99. _maxPage = Math.max(items.getCount() / _perPage, 1);
  100. AbstractPaginationView paginationView = (AbstractPaginationView) v.findViewById(getPaginationViewId());
  101. paginationView.setMaxPage(_maxPage);
  102. paginationView.setPage(_page);
  103. onPageChanged();
  104. showProgress(false);
  105. }
  106. }, new LuConsumer<LuPromiseError>() {
  107. @Override
  108. public void execute(LuPromiseError error) {
  109. showProgress(false);
  110. }
  111. });
  112. }
  113. protected abstract void onPageChanged();
  114. protected abstract LuPromise<LuPaginatedDbo<Dbo>> getLoadPagePromise(int page, int perPage, String query);
  115. protected abstract int getScrollViewId();
  116. protected abstract int getLoaderViewId();
  117. protected abstract int getLayoutId();
  118. protected abstract int getPaginationViewId();
  119. }