Search code examples
androidandroid-viewpager

can't disable viewpager swipe programmatically


I have a Fragment inside my app which contains a ViewPager. I have a String variable code. If code equals "NBG" I want to disable swipe of the 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;
    }
}

Solution

  • You're using two different ViewPagers. The ViewPager that's initialized using View.findViewById isn't the same as the CustomViewPager being created when code.equals(NBG).

    In fragment_currency_layout instead of using android.support.v4.view.ViewPager, use path_to_CustomViewPager. Then call mViewpager.setPagingEnabled instead of pager.setPagingEnabled.