如何在Android中实现当子ScrollView滚动时停止父级ScrollView的滚动?

10

我知道我们可以为滚动视图使用触摸监听器,例如

parentScrollView.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    Log.v(TAG, "PARENT TOUCH");

    findViewById(R.id.child_scroll).getParent()
            .requestDisallowInterceptTouchEvent(false);
    return false;
    }
});

childScrollView.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    Log.v(TAG, "CHILD TOUCH");

    // Disallow the touch request for parent scroll on touch of  child view
    v.getParent().requestDisallowInterceptTouchEvent(true);
    return false;
    }
});

我面临的问题是我的子滚动视图不是父滚动视图的直接子视图。在这种情况下,v.getParent() 不起作用,当我触摸并尝试滚动我的子滚动视图时,整个主滚动视图都会滚动。

我的滚动视图在布局中的位置(视图是动态创建的,所以我需要使用很多布局)

linearLayout
  ParentscrollView(0)
          linearLayout(0)
              relativeLayout(0)
                       TextView(0)
              relativeLayout(1)
                    childScrollView(0)

需要帮助..提前感谢!!
1个回答

8

findViewById()不是用于父滚动视图ID的吗?为什么它不能工作?

childScrollView.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    Log.v(TAG, "CHILD TOUCH");

    // Disallow the touch request for parent scroll on touch of  child view
    findViewById(parentLayouttId).requestDisallowInterceptTouchEvent(true);
    return false;
    }
});

你说这些视图是动态添加的。这些视图能直接从活动中引用吗?是哪个异常?空指针异常吗?堆栈跟踪会很好地找出问题所在! - Sachin Kottary
04-21 14:50:37.450: E/AndroidRuntime(29975): java.lang.NullPointerException 04-21 14:50:37.450: E/AndroidRuntime(29975): at com.tabvey.survey.DropDownView$10.onTouch(DropDownView.java:344) 04-21 14:50:37.450: E/AndroidRuntime(29975): at android.view.View.dispatchTouchEvent(View.java:7701) 04-21 14:50:37.450: E/AndroidRuntime(29975): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210) - Asif Sb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接