在Android中的ViewPager上设置onClickListener

时间:2015-10-13 06:53:01

标签: android android-viewpager onclicklistener

我有一个ViewPager,我设置了OnClickListener

ViewPager未检测到点击。这有什么不对吗?

代码:

  viewPager = (ViewPager) findViewById(R.id.pager);
    ImagePagerAdapter adapter = new ImagePagerAdapter();
    viewPager.setAdapter(adapter);        

    viewPager.setOnClickListener(new View.OnClickListener() {    
       @Override
       public void onClick(View view) {
            Toast.makeText(getBaseContext(), "view Pager Clicked",  Toast.LENGTH_SHORT).show();
         }

       });

3 个答案:

答案 0 :(得分:1)

您可以在setOnClickListener方法中使用适配器内的instantiateItem。 它对我有用。

答案 1 :(得分:0)

ViewPager不适用于onClick。它有OnPageChangelistener如下:

mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        // this will execute when page will be selected
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

答案 2 :(得分:0)

我们了解您希望识别ViewPager上的触摸事件,以便您可以触发隐藏ActionBar的动画。一种方法要求您创建自己的ViewPager子类并覆盖onInterceptTouchEvent

public class ABetterViewPager extends ViewPager {

    public ABetterViewPager(Context context) {
        super(context);
    }

    public ABetterViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        //Enter the code here to communicate a touch event
        return super.onInterceptTouchEvent(ev);
    }
}

您可能需要根据您的规格定制上述内容。例如,您可能只想在有人开始在屏幕上移动手指时触发事件,在这种情况下您将使用:

if (ev.getAction() == MotionEvent.ACTION_MOVE) {
    //User is moving their finger over the screen
}

关于将触摸事件从您的ViewPager传送到需要发布的ActionBar隐藏动画(我假设是Activity托管ViewPager })然后您可以使用interface / EventBus

另外,请勿忘记将ViewPager xml文件中的layout替换为自定义类的全名(即com.example.mywidgets.ABetterViewPager,或其他)