mohamad bagheri
mohamad bagheri

Reputation: 499

android -How to disable paging by swiping with finger on viewpager but allow onClickListener

This is my code for viewPager . I want to disable user to swipe between viewPager but be able to click on it .

This is my code ;

        vp= (ViewPager)header.findViewById(R.id.pager); 
    vp.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });

    vp.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent in=new Intent (FistActiivty.this,List.class);
            in.putExtra("for","latest");
            startActivity(in);              
        }
    });

it disable swipe by user but onclicklistener is not working after that .

How can I make onclicklistener works again but disable swipe by user ?

Upvotes: 1

Views: 1517

Answers (3)

A.R.
A.R.

Reputation: 2641

You need to create custom class that extends ViewPager like this

MyViewPager.java

public class MyViewPager extends ViewPager 
{
    public MyViewPager(Context context) 
    {
        super(context);
    }

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

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        // Never allow swiping to switch between pages
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return false;
    }

}

Secondly, you need to make one change in your xml where you have defined android.support.v4.view.ViewPager

Like this

<YourProjectPackageName.MyViewPager
        android:id="@+id/viewPager"
        android:layout_width="fill_parent"
        android:layout_height="match_parent" />

Upvotes: 2

Bojan Kseneman
Bojan Kseneman

Reputation: 15668

I am using this. You need to call viewPager.setPagingEnabled(false);

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

/**
 * Created by ksenchy on 2.4.2015.
 */
public class CustomViewPager extends ViewPager {

    private boolean enabled = true;

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

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

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

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

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

Upvotes: 0

Piotr Golinski
Piotr Golinski

Reputation: 1000

Create custom viewpager class:

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

and use it i your xml file:

<mypackage.CustomViewPager 
android:id="@+id/myViewPager" 
android:layout_height="match_parent" 
android:layout_width="match_parent" />

Upvotes: 0

Related Questions