2016-04-25 7 views
5

Ich möchte auf Click-Ereignis in meinem View Pager setzen. Mein ViewPagerAdapter sieht aus wie this-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; 
    } 
} 

Und ich OnClickListener wie dies in meiner Hauptaktivität setzte

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

Mein ViewPager funktioniert gut. Ich habe versucht, OnClickListener sowohl in der Hauptaktivität als auch in der ViewPagerAdapter-Klasse zu implementieren. Es funktioniert nicht so oder so.

Antwort

0

Sie können onClickListener nicht für viewPager verwenden. Sie müssen in folgenden Art und Weise verwenden,

Senden der Motion zum GestureDetector

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

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

Referenz: 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") 

     } 
    }); 

Verwenden oben Schnipsel in Ihre Aktivität und führen Sie, was Sie in Methoden tun wnat

+0

versuchte ich OnClick Ereignis innerhalb dieser Methoden. Es funktioniert auch nicht –

+0

Können Sie den View Pager an Ort und Stelle, Scroll passiert? – Haroon

+0

Möchten Sie den Klick auf die ganze Seite oder ein bestimmtes Steuerelement auf dieser Seite anwenden? – Haroon

2

Verwenden Sie diese Klasse für den Pager-Klick auf die Ansicht.

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-Ereignis

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

Das funktioniert für mich. –

+1

Dadurch wird die Position von currentItem in onItemClick abgerufen, nicht die Position von Item, auf der click-Ereignisse ausgeführt werden. –

Verwandte Themen