在膨胀的View上设置onClick后,Viewpager不再可刷卡

时间:2015-12-10 13:28:46

标签: android android-layout onclick android-viewpager

我有一个包含图片的viewpager。如果我使用xml布局创建图像视图,如下所示

SELECT a.reg_id, a.fname, a.lname, a.mobile, b.qualification 
FROM personal_details a, education_details b 
WHERE a.reg_id = b.reg_id 
GROUP BY b.qualification 

添加onClickListener后,我再也无法在页面之间滑动视图寻呼机。没有onClickListener,我可以这样做。

但是,如果我从代码中创建我的ImageView(而不是使用xml布局),如下所示

@Override
public Object instantiateItem(final ViewGroup container, final int position) {
    final int realPosition = getItemPosition(position);
    View view = LayoutInflater.from(mContext).inflate(R.layout.item_adsong, container, false);
    ImageView imageView = (ImageView)view.findViewById(R.id.adsong_img);
    /... set to the image.../

    view.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            onClickPage(realPosition);
        }
    });
    container.addView(view);
    return view;
}

我现在可以滑动视图寻呼机,我可以随意点击。为什么我上面的第一个例子是拦截滑动,而第二个例子不是?我怎么能修复上面的第一个例子,允许刷卡和onClick仍然工作(我更喜欢使用布局,因为我有几个例如一些TextViews而不仅仅是ImageView在我的视图寻呼机中显示)。谢谢!

1 个答案:

答案 0 :(得分:1)

经过进一步彻底调试和调查后,根据https://groups.google.com/forum/#!topic/android-developers/wIqNP4fzJQc找到了问题。问题的原因是因为我的.xml布局中存在TextView。默认情况下,TextView是可滚动的。

鉴于TextView是可滚动的,ViewPager然后允许文本滚动,不拦截滚动触摸并传递给孩子。因此,ViewPager的滚动触摸不起作用。

要解决此问题,我会覆盖TextView的canScrollHorizontal函数以返回false。这解决了问题

public class MyTextView extends TextView {
    //...
    @Override
    public boolean canScrollHorizontally(int direction) {
        return false;
    }
    //....

注意:使用setHorizontallyScrolling(false)或在TextView的XML中设置android:scrollHorizontally="false"属性无法以某种方式解决问题。

希望这可以帮助一些面对ViewPager的人不再可滚动的问题。