如何锁定viewpager中的页面?

问题描述 投票:1回答:1

我试图让我的应用程序锁定到按下按钮上的页面。我有3页可以在两者之间滑动,只有按钮才可以访问。我通过将getCount设置为4来执行此操作,但是您仍然可以滑动到其他页面,我希望将应用程序锁定为4,直到按下按钮。

这是我的代码:

public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;
            switch (position) {
                case 0:
                    fragment = new FragmentRecord();
                    break;
                case 1:
                    fragment = new FragmentCalc();
                    break;
                case 2:
                    fragment = new FragmentAccounts();
                    break;
                case 3:
                    fragment = new FragmentSettings();
                    break;
            }

        return fragment;
    }

    @Override
    public int getCount() {
        if (showSettings) {
            return 4;
        } else {
            return 3;
        }

    }

}



public void settingsButton(View view) {
    showSettings = true;
    View scrollbar = (View) findViewById(R.id.headerSlider);
    scrollbar.setVisibility(View.GONE);
    mSectionsPagerAdapter.notifyDataSetChanged();
    mViewPager.setCurrentItem(3);

}
java android
1个回答
1
投票

您可以创建一个可以控制其滑动操作的自定义ViewPager类:

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

public class ViewPagerSwipeControlled extends ViewPager {

    private boolean swipeEnabled = true;

    public ViewPagerSwipeControlled(Context context) {
        super(context);
    }

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

    public void setSwipeEnabled(boolean swipeEnabled) {
        this.swipeEnabled = swipeEnabled;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return swipeEnabled;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (swipeEnabled) {
            return super.onTouchEvent(ev);
        } else {
            return true;
        }
    }

}

在你的布局xml中:

<com.myapp.view.ViewPagerSwipeControlled
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

启用和禁用可滑动性:

ViewPagerSwipeControlled viewPager = findViewById(R.id.viewPager);

...
viewPager.setSwipeEnabled(false);

...
viewPager.setSwipeEnabled(true);
© www.soinside.com 2019 - 2024. All rights reserved.