siva
siva

Reputation: 1481

Navigate from fragment to activity on swipe

I am working on android TabLayout with swipe functionality. I used fragment to navigate inside the tablayout.

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(
            getSupportFragmentManager());

      adapter.addFragment(new OneFragment(), "One");
      adapter.addFragment(new TwoFragment(), "Two");
      adapter.addFragment(new ThreeFragment(), "Three");
      adapter.addFragment(new FourFragment(), "Four");
      adapter.addFragment(new FivetFragment(), "Five");

adapter.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        if (isGoingToRightPage && isNavigated
                && dragging == ViewPager.SCROLL_STATE_DRAGGING) {
            if (mLastPage == position)
                navigateToLoginScreen();
        } else {
           //do nothing
        }
    }

    @Override
    public void onPageSelected(int position) {
        if (position == APP_INTRO_TOTAL - 1) {
            isGoingToRightPage = true;
        } else {
            isGoingToRightPage = false;
        }
        mLastPage = position;
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        dragging = state;
    }
});

private void navigateToLoginScreen() {
   isNavigated = false;
   Intent intent = new Intent(AppIntroActivity.this, LoginActivity.class);
   startActivity(intent);
   finish();
}

    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

When user swipe the Fragment inside the TabLayout, the Fragments navigate left and right. Here FivetFragment() is the last fragment in Tablayout. If i swipe left from FivetFragment() fragment, currently nothing happens because FivetFragment() is the last fragment in that TabLayout. I want to navigate to next activity called Profile.Java when i swipe left from FivetFragment() fragment.

Is it possible to navigate from an Fragment to Profile Activity on swipe the Fragment.

Please help me to do this in android.

Upvotes: 1

Views: 601

Answers (1)

GvSharma
GvSharma

Reputation: 2670

just override your viewpager.addOnPageChangeListener. and add following code

adapter.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if (isGoingToRightPage && isNavigated
                    && dragging == ViewPager.SCROLL_STATE_DRAGGING) {
                if (mLastPage == position)
                    navigateToLoginScreen();
            } else {
               //do nothing
            }
        }

        @Override
        public void onPageSelected(int position) {
            if (position == APP_INTRO_TOTAL - 1) {
                isGoingToRightPage = true;
            } else {
                isGoingToRightPage = false;
            }
            mLastPage = position;
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            dragging = state;
        }
    });

    private void navigateToLoginScreen() {
       isNavigated = false;
       Intent intent = new Intent(AppIntroActivity.this, LoginActivity.class);
       startActivity(intent);
       finish();
    }

define these globally

int mLastPage;
boolean isGoingToRightPage;
boolean isNavigated = true;
int dragging;

Upvotes: 1

Related Questions