2016-04-25 18 views
5

Desidero impostare l'evento click nel mio View Pager. Il mio ViewPagerAdapter si presenta come questo-Clickable View Pager in Android

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

E io pongo OnClickListener come questo nella mia attività principale

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

mio ViewPager funziona bene. Ho provato a implementare OnClickListener sia nell'Attività principale che nella classe ViewPagerAdapter. Non funziona in entrambi i casi.

risposta

0

Non è possibile utilizzare onClickListener per viewPager. È necessario utilizzare in modo seguente,

invio del MotionEvent al GestureDetector

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

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

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

1
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") 

     } 
    }); 

Usa sopra Questo esempio vi nella vostra attività ed eseguire quello che wnat fare metodi all'interno

+0

ho cercato evento OnClick all'interno di questi metodi. Funziona o non funziona –

+0

Riesci a ottenere il cercapersone View in posizione, è in corso lo scorrimento? – Haroon

+0

Vuoi applicare il clic sull'intera pagina o controllo specifico su quella pagina? – Haroon

2

Utilizzare questa classe per visualizzare il cercapersone.

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

clickablePager.setOnItemClickListener(new ClickableViewPager.OnItemClickListener() { 
      @Override 
      public void onItemClick(int position) { 
    } 
}); 
+0

Questo funziona per me. –

+1

Ottiene la posizione di currentItem in onItemClick, non la posizione di Item su cui viene eseguito l'evento click. –