react-native-navigation的迁移库

ViewPagerScreen.java 3.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.reactnativenavigation.screens;
  2. import android.support.design.widget.TabLayout;
  3. import android.support.v4.view.ViewPager;
  4. import android.support.v7.app.AppCompatActivity;
  5. import com.reactnativenavigation.params.ScreenParams;
  6. import com.reactnativenavigation.params.TopTabParams;
  7. import com.reactnativenavigation.views.ContentView;
  8. import com.reactnativenavigation.views.LeftButtonOnClickListener;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
  12. public class ViewPagerScreen extends Screen {
  13. private static final int OFFSCREEN_PAGE_LIMIT = 99;
  14. private List<ContentView> contentViews;
  15. private ViewPager viewPager;
  16. public ViewPagerScreen(AppCompatActivity activity, ScreenParams screenParams, LeftButtonOnClickListener backButtonListener) {
  17. super(activity, screenParams, backButtonListener);
  18. }
  19. @Override
  20. protected void createContent() {
  21. TabLayout tabLayout = topBar.initTabs();
  22. createViewPager();
  23. addPages();
  24. setupViewPager(tabLayout);
  25. }
  26. private void createViewPager() {
  27. viewPager = new ViewPager(getContext());
  28. viewPager.setOffscreenPageLimit(OFFSCREEN_PAGE_LIMIT);
  29. LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
  30. if (screenParams.styleParams.drawScreenBelowTopBar) {
  31. lp.addRule(BELOW, topBar.getId());
  32. }
  33. addView(viewPager, lp);
  34. }
  35. private void addPages() {
  36. contentViews = new ArrayList<>();
  37. for (TopTabParams tab : screenParams.topTabParams) {
  38. ContentView contentView = new ContentView(getContext(), tab.screenId, tab.navigationParams);
  39. addContent(contentView);
  40. contentViews.add(contentView);
  41. }
  42. }
  43. private void setupViewPager(TabLayout tabLayout) {
  44. ContentViewPagerAdapter adapter = new ContentViewPagerAdapter(contentViews, screenParams.topTabParams);
  45. viewPager.setAdapter(adapter);
  46. viewPager.addOnPageChangeListener(adapter);
  47. tabLayout.setupWithViewPager(viewPager);
  48. }
  49. private void addContent(ContentView contentView) {
  50. LayoutParams params = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
  51. viewPager.addView(contentView, params);
  52. }
  53. @Override
  54. public void unmountOnDetachedFromWindow() {
  55. for (ContentView contentView : contentViews) {
  56. contentView.unmountOnDetachedFromWindow();
  57. }
  58. }
  59. @Override
  60. public void setOnDisplayListener(OnDisplayListener onContentViewDisplayedListener) {
  61. contentViews.get(0).setOnDisplayListener(onContentViewDisplayedListener);
  62. }
  63. @Override
  64. public String getScreenInstanceId() {
  65. return screenParams.topTabParams.get(viewPager.getCurrentItem()).navigationParams.screenInstanceId;
  66. }
  67. @Override
  68. public String getNavigatorEventId() {
  69. return screenParams.topTabParams.get(viewPager.getCurrentItem()).navigationParams.navigatorEventId;
  70. }
  71. }