2016-04-25 73 views
5

我想在我的View Pager中設置點擊事件。我ViewPagerAdapter看起來像這 -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; 
    } 
} 

,我在我的主要活動設置OnClickListener這樣

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工作正常。我試圖在主活動以及ViewPagerAdapter類中實現OnClickListener。它不會以任何方式工作。

回答

0

您無法將onClickListener用於viewPager。您需要在下面的方式來使用,

發送MotionEvent到GestureDetector

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

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

參考: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") 

     } 
    }); 

使用上述snipt到你的活動,並執行你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

這將獲取onItemClick中currentItem的位置,而不是執行單擊事件的Item的位置。 –

相關問題