我有一个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();
}
});
答案 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
,或其他)