react-native-navigation的迁移库

ViewPagerScreen.java 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. contentViews = new ArrayList<>();
  25. viewPager = new ViewPager(getContext());
  26. viewPager.setOffscreenPageLimit(99);
  27. addView(viewPager);
  28. for (TopTabParams topTabParam : screenParams.topTabParams) {
  29. ContentView contentView = new ContentView(getContext(),
  30. topTabParam.screenId,
  31. screenParams.passProps,
  32. screenParams.navigationParams);
  33. addContent(contentView);
  34. contentViews.add(contentView);
  35. }
  36. ContentViewPagerAdapter adapter =
  37. new ContentViewPagerAdapter(viewPager, contentViews, screenParams.topTabParams);
  38. viewPager.setAdapter(adapter);
  39. tabLayout.setupWithViewPager(viewPager);
  40. }
  41. private void addContent(ContentView contentView) {
  42. LayoutParams params = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
  43. if (screenParams.styleParams.drawScreenBelowTopBar) {
  44. params.addRule(BELOW, topBar.getId());
  45. }
  46. viewPager.addView(contentView, params);
  47. }
  48. @Override
  49. public void ensureUnmountOnDetachedFromWindow() {
  50. for (ContentView contentView : contentViews) {
  51. contentView.ensureUnmountOnDetachedFromWindow();
  52. }
  53. }
  54. @Override
  55. public void preventUnmountOnDetachedFromWindow() {
  56. for (ContentView contentView : contentViews) {
  57. contentView.preventUnmountOnDetachedFromWindow();
  58. }
  59. }
  60. @Override
  61. public void preventMountAfterReattachedToWindow() {
  62. for (ContentView contentView : contentViews) {
  63. contentView.preventMountAfterReattachedToWindow();
  64. }
  65. }
  66. public class ContentViewPagerAdapter extends PagerAdapter implements TabLayout.OnTabSelectedListener, ViewPager.OnPageChangeListener {
  67. private ViewPager viewPager;
  68. private List<ContentView> contentViews;
  69. private List<TopTabParams> topTabParams;
  70. public ContentViewPagerAdapter(ViewPager viewPager, List<ContentView> contentViews, List<TopTabParams> topTabParams) {
  71. this.viewPager = viewPager;
  72. this.contentViews = contentViews;
  73. this.topTabParams = topTabParams;
  74. }
  75. @Override
  76. public Object instantiateItem(ViewGroup container, int position) {
  77. return contentViews.get(position);
  78. }
  79. @Override
  80. public void destroyItem(ViewGroup container, int position, Object view) {
  81. }
  82. @Override
  83. public int getCount() {
  84. return contentViews.size();
  85. }
  86. @Override
  87. public boolean isViewFromObject(View view, Object object) {
  88. return view == object;
  89. }
  90. @Override
  91. public CharSequence getPageTitle(int position) {
  92. return topTabParams.get(position).title;
  93. }
  94. @Override
  95. public void onTabSelected(TabLayout.Tab tab) {
  96. int position = tab.getPosition();
  97. viewPager.setCurrentItem(position);
  98. }
  99. @Override
  100. public void onTabUnselected(TabLayout.Tab tab) {
  101. }
  102. @Override
  103. public void onTabReselected(TabLayout.Tab tab) {
  104. }
  105. @Override
  106. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  107. }
  108. @Override
  109. public void onPageSelected(int position) {
  110. }
  111. @Override
  112. public void onPageScrollStateChanged(int state) {
  113. }
  114. }
  115. }