简体   繁体   中英

How to avoid going to previous slide in Viewpager in android

I have implemented a ViewPager in my application which consist of two slides. I can go from first slide to second slide and reverse as well. But I have a special case here. If the user goes from First Slide to Second Slide . He should not be able to go back to the First slide . I need to disable going back to the First Slide once he enters the Second Slide .

Here is my code:

public class BotConnectionDialog extends DialogFragment {

    private RelativeLayout toolbar;
    private ImageView toolbarCloseButton;
    private View layoutView;
    private ViewPager viewPager;
    private BotConnectionDialogAdapter myViewPagerAdapter;
    private LinearLayout dotsLayout;
    private TextView[] dots;
    int width, height;
    DisplayMetrics metrics;
    private int[] layouts;
    private final String TAG = BotConnectionDialog.class.getSimpleName();
    private Button btnSkip, btnNext;

    View.OnClickListener myListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Handler handler = new Handler();
            handler.post(new Runnable() {
                @Override
                public void run() {
                    getActivity().getSupportFragmentManager().popBackStackImmediate();
                }
            });
        }
    };

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.botconnection_layout, container, false);
        Typeface typeface = Typeface.createFromAsset(getActivity().getAssets(), "fonts/corbert.otf");
        toolbar = (RelativeLayout) rootView.findViewById(R.id.customAppBarLayout);
        toolbar.setBackgroundColor(Color.parseColor("#00000000"));
        toolbarCloseButton = (ImageView) rootView.findViewById(R.id.toolbarCloseButton);
        toolbarCloseButton.setOnClickListener(myListener);
        viewPager = (ViewPager) rootView.findViewById(R.id.view_pager);
        dotsLayout = (LinearLayout) rootView.findViewById(R.id.layoutDots);
        btnSkip = (Button) rootView.findViewById(R.id.btn_skip);
        btnSkip.setTypeface(typeface);
        btnNext = (Button) rootView.findViewById(R.id.btn_next);
        btnNext.setTypeface(typeface);
        metrics = getResources().getDisplayMetrics();
        width = metrics.widthPixels;
        height = metrics.heightPixels;

        // layouts of all welcome sliders
        // add few more layouts if you want
        layouts = new int[]{
                R.layout.slide1,
                R.layout.slide2};

        // adding bottom dots
        addBottomDots(0);

        myViewPagerAdapter = new BotConnectionDialogAdapter();
        viewPager.setAdapter(myViewPagerAdapter);
        viewPager.addOnPageChangeListener(viewPagerPageChangeListener);

        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // checking for last page
                // if last page home screen will be launched
                int current = getItem(+1);
                if (current < layouts.length) {
                    // move to next screen
                    viewPager.setCurrentItem(current);
                } else {

                }
            }
        });
        return rootView;
    }

    private void addBottomDots(int currentPage) {
        dots = new TextView[layouts.length];

        int[] colorsActive = getResources().getIntArray(R.array.array_dot_active);
        int[] colorsInactive = getResources().getIntArray(R.array.array_dot_inactive);

        dotsLayout.removeAllViews();
        for (int i = 0; i < dots.length; i++) {
            dots[i] = new TextView(getActivity());
            dots[i].setText(Html.fromHtml("&#8226;"));
            dots[i].setTextSize(35);
            dots[i].setTextColor(colorsInactive[currentPage]);
            dotsLayout.addView(dots[i]);
        }

        if (dots.length > 0)
            dots[currentPage].setTextColor(colorsActive[currentPage]);
    }

    private int getItem(int i) {
        return viewPager.getCurrentItem() + i;
    }


    //  viewpager change listener
    ViewPager.OnPageChangeListener viewPagerPageChangeListener = new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            addBottomDots(position);

            // changing the next button text 'NEXT' / 'GOT IT'
            if (position == layouts.length - 1) {
                // last page. make button text to GOT IT
                btnNext.setText(getString(R.string.start));
                btnSkip.setVisibility(View.GONE);
                /**
                 * bluetooth connection the bot
                 */
                Toast.makeText(getActivity(), "Finished", Toast.LENGTH_SHORT).show();
            } else {
                // still pages are left
                btnNext.setText(getString(R.string.next));
                btnSkip.setVisibility(View.VISIBLE);
                /**
                 * First page
                 */
                Toast.makeText(getActivity(), "2nd page", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {

        }
    };


    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        //dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        return dialog;
    }

    @Override
    public void onResume() {
        super.onResume();
//        getDialog().getWindow().setLayout((7 * width) / 7, (4 * height) / 5);
    }

    public class BotConnectionDialogAdapter extends PagerAdapter {
        /**
         * View pager adapter
         */
        private LayoutInflater layoutInflater;

        public BotConnectionDialogAdapter() {
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View view = layoutInflater.inflate(layouts[position], container, false);
            container.addView(view);
            return view;
        }

        @Override
        public int getCount() {
            return layouts.length;
        }

        @Override
        public boolean isViewFromObject(View view, Object obj) {
            return view == obj;
        }


        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            View view = (View) object;
            container.removeView(view);
        }

    }

}
/**
 * To disable and enable scrolling on ViewPager, just set shouldScroll to true or false.
 */

public class ScrollableViewPager extends ViewPager {

    private boolean shouldScroll = true;

    public ScrollableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setShouldScroll(boolean shouldScroll) {
        this.shouldScroll = shouldScroll;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return shouldScroll && super.onTouchEvent(ev);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return shouldScroll && super.onInterceptTouchEvent(ev);
    }
}

Now use this ScrollableViewPager in place of the default ViewPager and in your onPageSelected() callback check for the position. If it is the last position, call the setShouldScroll(false) method on your viewPager instance, which will make shouldScroll to false in our ScrollableViewPager class and eventually make the scrolling invalid as we have overridden onTouchEvent() and onInterceptTouchEvent() method, which checks for the value of shouldScroll .

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