无法以编程方式禁用viewpager滑动

时间:2014-02-26 20:20:38

标签: android android-viewpager

我的应用内有Fragment,其中包含ViewPager。我有一个String变量代码。如果code等于“NBG”,我想停用ViewPager的滑动。

public class CurrencyFragment extends BaseFragment {

    @Override
    public View onCreateView(final LayoutInflater inflater,
        ViewGroup container, Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.fragment_currency_layout, container, false);

        mViewpager = (ViewPager) view.findViewById(R.id.Detailpager);

        Bundle bundle = getArguments();
        if (bundle != null) {
            code = object.getCode();
        }

        if (code.equals("NBG")) {
            CustomViewPager pager = new CustomViewPager(getActivity(), null);
            pager.setPagingEnabled(false);
        } 

        return view;
    };


public class CustomViewPager extends ViewPager {

    private boolean enabled;

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.enabled = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (this.enabled) {
            return super.onTouchEvent(event);
        }

        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (this.enabled) {
            return super.onInterceptTouchEvent(event);
        }

        return false;
    }

    public void setPagingEnabled(boolean enabled) {
        this.enabled = enabled;
    }
}

2 个答案:

答案 0 :(得分:2)

你正在使用两个不同的ViewPager。使用ViewPager初始化的View.findViewByIdCustomViewPager时创建的code.equals(NBG)不同。

fragment_currency_layout而不是android.support.v4.view.ViewPager,使用path_to_CustomViewPager。然后拨打mViewpager.setPagingEnabled而不是pager.setPagingEnabled

答案 1 :(得分:2)

mViewpager = (ViewPager) view.findViewById(R.id.Detailpager);

在您声明ViewPager的XML布局中,您应该声明您的CustomViewPager。 CustomViewPager需要在自己的文件中。

目前,您正在实例化常规ViewPager(我假设您没有提供XML代码)。然后你做:

CustomViewPager pager = new CustomViewPager(getActivity(), null);
pager.setPagingEnabled(false);

但这是您实例化的额外ViewPager,与您屏幕上的任何UI无关。