简体   繁体   English

当viewpager的最后一个片段滑动时,如何从片段变为活动?

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

I want startActivity(LoginActivity) when after 3rd fragment. 在第三个片段之后,我想要startActivity(LoginActivity)

In position 3rd fragment, I slide from right to left to start the activity. 在第3个片段中,我从右向左滑动以开始活动。

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. 您必须修改ViewPager.OnPageChangeListener方法的实现。 Here is what i used and managed to solve this issue. 这是我用来解决此问题的方法。

I put here your transition to (LoginActivity). 我在这里将您转换为(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;
            }
        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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