react-native-navigation的迁移库

ViewPagerScreen.java 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package com.reactnativenavigation.screens;
  2. import android.support.design.widget.TabLayout;
  3. import android.support.v4.view.PagerAdapter;
  4. import android.support.v4.view.ViewPager;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import com.reactnativenavigation.params.ScreenParams;
  9. import com.reactnativenavigation.params.TopTabParams;
  10. import com.reactnativenavigation.views.ContentView;
  11. import com.reactnativenavigation.views.TitleBarBackButtonListener;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
  15. public class ViewPagerScreen extends Screen {
  16. private List<ContentView> contentViews;
  17. private ViewPager viewPager;
  18. public ViewPagerScreen(AppCompatActivity activity, ScreenParams screenParams, TitleBarBackButtonListener backButtonListener) {
  19. super(activity, screenParams, backButtonListener);
  20. }
  21. @Override
  22. protected void createContent() {
  23. TabLayout tabLayout = topBar.initTabs();
  24. createViewPager();
  25. addPages();
  26. setupViewPager(tabLayout);
  27. }
  28. private void createViewPager() {
  29. viewPager = new ViewPager(getContext());
  30. viewPager.setOffscreenPageLimit(99);
  31. LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
  32. if (screenParams.styleParams.drawScreenBelowTopBar) {
  33. lp.addRule(BELOW, topBar.getId());
  34. }
  35. addView(viewPager, lp);
  36. }
  37. private void addPages() {
  38. contentViews = new ArrayList<>();
  39. for (TopTabParams topTabParam : screenParams.topTabParams) {
  40. ContentView contentView = new ContentView(getContext(),
  41. topTabParam.screenId,
  42. screenParams.passProps,
  43. screenParams.navigationParams);
  44. addContent(contentView);
  45. contentViews.add(contentView);
  46. }
  47. }
  48. private void setupViewPager(TabLayout tabLayout) {
  49. ContentViewPagerAdapter adapter =
  50. new ContentViewPagerAdapter(viewPager, contentViews, screenParams.topTabParams);
  51. viewPager.setAdapter(adapter);
  52. tabLayout.setupWithViewPager(viewPager);
  53. }
  54. private void addContent(ContentView contentView) {
  55. LayoutParams params = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
  56. viewPager.addView(contentView, params);
  57. }
  58. @Override
  59. public void ensureUnmountOnDetachedFromWindow() {
  60. for (ContentView contentView : contentViews) {
  61. contentView.ensureUnmountOnDetachedFromWindow();
  62. }
  63. }
  64. @Override
  65. public void preventUnmountOnDetachedFromWindow() {
  66. for (ContentView contentView : contentViews) {
  67. contentView.preventUnmountOnDetachedFromWindow();
  68. }
  69. }
  70. @Override
  71. public void preventMountAfterReattachedToWindow() {
  72. for (ContentView contentView : contentViews) {
  73. contentView.preventMountAfterReattachedToWindow();
  74. }
  75. }
  76. public class ContentViewPagerAdapter extends PagerAdapter implements TabLayout.OnTabSelectedListener, ViewPager.OnPageChangeListener {
  77. private ViewPager viewPager;
  78. private List<ContentView> contentViews;
  79. private List<TopTabParams> topTabParams;
  80. public ContentViewPagerAdapter(ViewPager viewPager, List<ContentView> contentViews, List<TopTabParams> topTabParams) {
  81. this.viewPager = viewPager;
  82. this.contentViews = contentViews;
  83. this.topTabParams = topTabParams;
  84. }
  85. @Override
  86. public Object instantiateItem(ViewGroup container, int position) {
  87. return contentViews.get(position);
  88. }
  89. @Override
  90. public void destroyItem(ViewGroup container, int position, Object view) {
  91. }
  92. @Override
  93. public int getCount() {
  94. return contentViews.size();
  95. }
  96. @Override
  97. public boolean isViewFromObject(View view, Object object) {
  98. return view == object;
  99. }
  100. @Override
  101. public CharSequence getPageTitle(int position) {
  102. return topTabParams.get(position).title;
  103. }
  104. @Override
  105. public void onTabSelected(TabLayout.Tab tab) {
  106. int position = tab.getPosition();
  107. viewPager.setCurrentItem(position);
  108. }
  109. @Override
  110. public void onTabUnselected(TabLayout.Tab tab) {
  111. }
  112. @Override
  113. public void onTabReselected(TabLayout.Tab tab) {
  114. }
  115. @Override
  116. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  117. }
  118. @Override
  119. public void onPageSelected(int position) {
  120. }
  121. @Override
  122. public void onPageScrollStateChanged(int state) {
  123. }
  124. }
  125. }