Clickable View Pager on Android

I want to set the click event in my Pager view. 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 set 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 great. I tried to implement OnClickListener both in the main activity and in the ViewPagerAdapter class. This does not work anyway.

+5
source share
3 answers

Use this class to view the pager.

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) { } }); 
+2
source
  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 snipt above in your activity and do what you need to do inside methods

+1
source

You cannot use onClickListener for viewPager. You should use as follows:

Submitting a 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; } }); 

Link: fooobar.com/questions/106232 / ...

0
source

Source: https://habr.com/ru/post/1247848/


All Articles