简体   繁体   中英

How move from fragment to activity when viewpager's last fragment slide?

I want startActivity(LoginActivity) when after 3rd fragment.

In position 3rd fragment, I slide from right to left to start the activity.

I found some question but:

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    if(position == tutorialViewPager.getAdapter().getCount() - 1){

        Intent intent = new Intent(this, LoginActivity.class);
        startActivity(intent);
    }

}

In that case, when move 2nd fragment to 3rd fragment with slide, 3rd fragment(last fragment) was appeared a little bit and change Activity.

I want to change Activity when I slide last fragment(not from 2nd fragment to 3rd fragment, just slide 3rd fragment).

How I can warp Fragment to specific Activity when slide last fragment?

Please help me.

public class TutorialActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {

    int MAX_PAGE = 3;
    Fragment cur_fragment = new Fragment();

    ViewPager tutorialViewPager;

    private int selectedPageIndex = -1;
    private boolean exitWhenScrollNextPage = false;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tutorial_page);

        tutorialViewPager = (ViewPager) findViewById(R.id.tutorialViewPager);
        tutorialViewPager.setAdapter(new adapter(getSupportFragmentManager()));

        tutorialViewPager.addOnPageChangeListener(this);

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        if(position == tutorialViewPager.getAdapter().getCount() - 1){

            Intent intent = new Intent(this, LoginActivity.class);
            startActivity(intent);
        }

    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

    private class adapter extends FragmentPagerAdapter{

        public adapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {

            if(position<0 || MAX_PAGE <= position){
                return null;
            }

            switch (position){

                case 0:
                    cur_fragment = new TutorialFragmentA();
                    break;

                case 1:
                    cur_fragment = new TutorialFragmentB();
                    break;

                case 2:
                    cur_fragment = new TutorialFragmentC();
                    break;


            }
            return cur_fragment;
        }

        @Override
        public int getCount() {
            return MAX_PAGE;
        }
    }


}

You have to modify the implementation of the methods of ViewPager.OnPageChangeListener. Here is what i used and managed to solve this issue.

I put here your transition to (LoginActivity).

mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        boolean onLastPageChanged = false;
        @Override
        public void onPageSelected(int position) {
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            int lastFrag = mQuestionCollectionPagerAdapter.getCount() -1;

            if (onLastPageChanged && position == lastFrag) {
                //next
                Log.e(TAG, "Transition Happened");
            }
        }

        @Override
        public void onPageScrollStateChanged (int state) {
            int lastFrag = mQuestionCollectionPagerAdapter.getCount() -1;

            int currentFragment = mViewPager.getCurrentItem();
            if (currentFragment == lastFrag /*&& lastPos==lastIdx*/ && state == 1) {
                onLastPageChanged = true;
                Log.e(TAG, "page scroll state >>>>>>");
                Intent intent = new Intent(this, LoginActivity.class);
        startActivity(intent);
                finish();
            } else {
                onLastPageChanged = false;
            }
        }
    });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM