5

I want to set on click event in my View Pager. My ViewPagerAdapter looks like this-

public class ViewPagerAdapder extends PagerAdapter {

    Activity activity;
    String image[];

    public ViewPagerAdapder(Activity act, String[] imgArra) {
        image = imgArra;
        activity = act;
    }

    public int getCount() {
        return image.length;
    }

    public Object instantiateItem(View collection, final int position) {
        ImageView view = new ImageView(activity);

        view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                    ViewGroup.LayoutParams.MATCH_PARENT));
        new ImageDownloaderTask(view).execute(image[position]);
        view.setScaleType(ImageView.ScaleType.CENTER_CROP);
        view.setAdjustViewBounds(true);
        ((ViewPager) collection).addView(view, 0);

    //  view.setBackgroundResource(imageArray[position]);

        return view;
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);
    }

    @Override
    public Parcelable saveState() {
        return null;
    }
}

And I am setting OnClickListener like this in my Main Activity

 myPager = (ViewPager) view.findViewById(R.id.viewpager);

        myPager.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(), "Ckecking Success",
                        Toast.LENGTH_SHORT).show();
            }
}

My ViewPager works fine. I tried to implement OnClickListener in both Main Activity as well as in the ViewPagerAdapter class. It does not work either way.

Jean-François Corbett
  • 37,420
  • 30
  • 139
  • 188
Anupam
  • 2,845
  • 2
  • 16
  • 30

3 Answers3

2

Use this class for view pager click.

ClickableViewPager.java

public class ClickableViewPager extends ViewPager {
    private OnItemClickListener mOnItemClickListener;

    public ClickableViewPager(Context context) {
        super(context);
        setup();
    }

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

    private void setup() {
        final GestureDetector tapGestureDetector = new    GestureDetector(getContext(), new TapGestureListener());

        setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                tapGestureDetector.onTouchEvent(event);
                return false;
            }
        });
    }

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    private class TapGestureListener extends GestureDetector.SimpleOnGestureListener {

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            if(mOnItemClickListener != null) {
                mOnItemClickListener.onItemClick(getCurrentItem());
            }
            return true;
        }
    }
}

Click event

clickablePager.setOnItemClickListener(new ClickableViewPager.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
    }
 });
Pang
  • 9,564
  • 146
  • 81
  • 122
Makvin
  • 3,475
  • 27
  • 26
  • 1
    This will get the position of currentItem in onItemClick, not the position of Item on which click event is performed. – Akhil Tiwari Dec 21 '17 at 06:51
0

You cannot use onClickListener for viewPager. You need to use in following way,

Sending the MotionEvent to the GestureDetector

tapGestureDetector = new GestureDetector(this, new TapGestureListener());

viewPager.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            tapGestureDetector.onTouchEvent(event);
            return false;
        }
});

Reference: https://stackoverflow.com/a/11666743/1084174

Community
  • 1
  • 1
Sazzad Hissain Khan
  • 37,929
  • 33
  • 189
  • 256
0
   viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            Log.d(TAG, "onPageScrolled")
        }

        @Override
        public void onPageSelected(int position) {
            Log.d(TAG, "onPageScrollStateChanged")
        }

        @Override
        public void onPageScrollStateChanged(int state) {
             Log.d(TAG, "onPageScrollStateChanged")

        }
    });

Use above snipt into your activity and perform what you wnat to do inside methods

Haroon
  • 497
  • 4
  • 13