user3314123
user3314123

Reputation: 61

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;
    }
}

Upvotes: 0

Views: 1901

Answers (2)

ataulm
ataulm

Reputation: 15334

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

In your XML layout, where you declare your ViewPager, you should declare your CustomViewPager instead. CustomViewPager will need to be in its own file.

Currently, you are instantiating the regular ViewPager (I assume, as you haven't given the XML code). Then you do:

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

But this is an extra ViewPager you've instantiated which isn't related to any UI in your screen.

Upvotes: 2

adneal
adneal

Reputation: 30814

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.

Upvotes: 2

Related Questions