2016-04-25 9 views
5

View Pagerでクリックイベントを設定したいと思います。私ViewPagerAdapterはthis-AndroidのClickable Viewページャ

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

のように見えると私は

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

マイViewPagerが正常に動作します私の主な活動には、このようなOnClickListenerを設定しています。私はMain ActivityとViewPagerAdapterクラスの両方でOnClickListenerを実装しようとしました。それはいずれの方法でも動作しません。

答えて

0

viewPagerにonClickListenerを使用することはできません。あなたは

はGestureDetectorにMotionEventを送信するには、次のように使用する必要が

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

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

参考:あなたの活動にsnipt上記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") 

     } 
    }); 

使用とは、あなたの中のメソッドを実行するためにwnat何行います

+0

私は、これらのメソッド内のOnClickイベントを試してみました。それはしません –

+0

ビューページャを取得することができますか、スクロールは起こっていますか? – Haroon

+0

ページ全体またはそのページの特定のコントロールにクリックを適用しますか? – Haroon

2

ビューページャのクリックにこのクラスを使用します。

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

これは私のために働く。 –

+1

これは、clickイベントが実行されるItemの位置ではなく、onItemClick内のcurrentItemの位置を取得します。 –