123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- package com.reactnativenavigation.screens;
-
- import android.support.design.widget.TabLayout;
- import android.support.v4.view.PagerAdapter;
- import android.support.v4.view.ViewPager;
- import android.support.v7.app.AppCompatActivity;
- import android.view.View;
- import android.view.ViewGroup;
-
- import com.reactnativenavigation.params.ScreenParams;
- import com.reactnativenavigation.params.TopTabParams;
- import com.reactnativenavigation.views.ContentView;
- import com.reactnativenavigation.views.TitleBarBackButtonListener;
-
- import java.util.ArrayList;
- import java.util.List;
-
- import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-
- public class ViewPagerScreen extends Screen {
-
- private List<ContentView> contentViews;
- private ViewPager viewPager;
-
- public ViewPagerScreen(AppCompatActivity activity, ScreenParams screenParams, TitleBarBackButtonListener backButtonListener) {
- super(activity, screenParams, backButtonListener);
- }
-
- @Override
- protected void createContent() {
- TabLayout tabLayout = topBar.initTabs();
- createViewPager();
- addPages();
- setupViewPager(tabLayout);
- }
-
- private void createViewPager() {
- viewPager = new ViewPager(getContext());
- viewPager.setOffscreenPageLimit(99);
- LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
- if (screenParams.styleParams.drawScreenBelowTopBar) {
- lp.addRule(BELOW, topBar.getId());
- }
- addView(viewPager, lp);
- }
-
- private void addPages() {
- contentViews = new ArrayList<>();
- for (TopTabParams topTabParam : screenParams.topTabParams) {
- ContentView contentView = new ContentView(getContext(),
- topTabParam.screenId,
- screenParams.passProps,
- screenParams.navigationParams);
- addContent(contentView);
- contentViews.add(contentView);
- }
- }
-
- private void setupViewPager(TabLayout tabLayout) {
- ContentViewPagerAdapter adapter =
- new ContentViewPagerAdapter(viewPager, contentViews, screenParams.topTabParams);
- viewPager.setAdapter(adapter);
- tabLayout.setupWithViewPager(viewPager);
- }
-
- private void addContent(ContentView contentView) {
- LayoutParams params = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
- viewPager.addView(contentView, params);
- }
-
- @Override
- public void ensureUnmountOnDetachedFromWindow() {
- for (ContentView contentView : contentViews) {
- contentView.ensureUnmountOnDetachedFromWindow();
- }
- }
-
- @Override
- public void preventUnmountOnDetachedFromWindow() {
- for (ContentView contentView : contentViews) {
- contentView.preventUnmountOnDetachedFromWindow();
- }
- }
-
- @Override
- public void preventMountAfterReattachedToWindow() {
- for (ContentView contentView : contentViews) {
- contentView.preventMountAfterReattachedToWindow();
- }
- }
-
- public class ContentViewPagerAdapter extends PagerAdapter implements TabLayout.OnTabSelectedListener, ViewPager.OnPageChangeListener {
-
- private ViewPager viewPager;
- private List<ContentView> contentViews;
- private List<TopTabParams> topTabParams;
-
- public ContentViewPagerAdapter(ViewPager viewPager, List<ContentView> contentViews, List<TopTabParams> topTabParams) {
- this.viewPager = viewPager;
- this.contentViews = contentViews;
- this.topTabParams = topTabParams;
- }
-
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- return contentViews.get(position);
- }
-
- @Override
- public void destroyItem(ViewGroup container, int position, Object view) {
-
- }
-
- @Override
- public int getCount() {
- return contentViews.size();
- }
-
- @Override
- public boolean isViewFromObject(View view, Object object) {
- return view == object;
- }
-
- @Override
- public CharSequence getPageTitle(int position) {
- return topTabParams.get(position).title;
- }
-
- @Override
- public void onTabSelected(TabLayout.Tab tab) {
- int position = tab.getPosition();
- viewPager.setCurrentItem(position);
- }
-
- @Override
- public void onTabUnselected(TabLayout.Tab tab) {
-
- }
-
- @Override
- public void onTabReselected(TabLayout.Tab tab) {
-
- }
-
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-
- }
-
- @Override
- public void onPageSelected(int position) {
-
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {
-
- }
- }
- }
|