react-native-navigation的迁移库

TabbedScreen.java 4.6KB

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