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.

AbstractPaginationView.java 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package com.luticate.utils.ui.views;
  2. import android.content.Context;
  3. import android.util.AttributeSet;
  4. import android.widget.LinearLayout;
  5. import com.luticate.utils.business.LuConsumer;
  6. import com.luticate.utils.business.LuPromise;
  7. import java.util.List;
  8. import java.util.Vector;
  9. /**
  10. * Created by robin on 12/8/15.
  11. */
  12. public abstract class AbstractPaginationView extends LinearLayout {
  13. private LuConsumer<Integer> _onPageChanged = null;
  14. private int _page = 0;
  15. private int _maxPage = 1;
  16. private int _contextPagesCount = 2;
  17. public AbstractPaginationView(Context context) {
  18. super(context);
  19. init();
  20. }
  21. public AbstractPaginationView(Context context, AttributeSet attrs) {
  22. super(context, attrs);
  23. init(attrs);
  24. }
  25. public AbstractPaginationView(Context context, AttributeSet attrs, int defStyleAttr) {
  26. super(context, attrs, defStyleAttr);
  27. init(attrs);
  28. }
  29. private void init(AttributeSet attrs)
  30. {
  31. init();
  32. //_contextPagesCount = attrs.getAttributeIntValue(R.styleable.DefaultPaginationView_contextPagesCount, _contextPagesCount);
  33. }
  34. private void init()
  35. {
  36. }
  37. @Override
  38. protected void onAttachedToWindow() {
  39. super.onAttachedToWindow();
  40. if (isInEditMode())
  41. {
  42. onUpdatePages();
  43. }
  44. }
  45. protected List<Integer> getPages()
  46. {
  47. List<Integer> pages = new Vector<>();
  48. int start = Math.max(0, getPage() - getContextPagesCount());
  49. int end = Math.min(start + getContextPagesCount() + 1, getMaxPage());
  50. for (int i = start; i < end; ++i)
  51. {
  52. pages.add(i);
  53. }
  54. return pages;
  55. }
  56. protected abstract void onUpdatePages();
  57. public int getMaxPage() {
  58. return isInEditMode() ? 50 : _maxPage;
  59. }
  60. public void setMaxPage(int maxPage) {
  61. _maxPage = maxPage;
  62. onUpdatePages();
  63. }
  64. public int getContextPagesCount() {
  65. return _contextPagesCount;
  66. }
  67. public void setContextPagesCount(int contextPagesCount) {
  68. _contextPagesCount = contextPagesCount;
  69. onUpdatePages();
  70. }
  71. public void setPage(int page)
  72. {
  73. _page = page;
  74. onUpdatePages();
  75. }
  76. public int getPage()
  77. {
  78. return isInEditMode() ? 24 : _page;
  79. }
  80. public void setOnPageChanged(LuConsumer<Integer> onPageChanged) {
  81. _onPageChanged = onPageChanged;
  82. }
  83. public void loadPage(int page)
  84. {
  85. if (_onPageChanged != null)
  86. {
  87. _onPageChanged.execute(page);
  88. }
  89. }
  90. public void loadNextPage()
  91. {
  92. int page = getPage();
  93. if (page < getMaxPage() - 1)
  94. {
  95. loadPage(page + 1);
  96. }
  97. }
  98. public void loadPreviousPage()
  99. {
  100. int page = getPage();
  101. if (page > 0)
  102. {
  103. loadPage(page - 1);
  104. }
  105. }
  106. }