在滚动视图中使用Listview

时间:2014-04-24 05:35:57

标签: android listview android-scrollview

在我的应用程序中,我确实在Scrollview布局(根布局)中使用滚动。当我这样做时,子滚动停止滚动。为此我找到了解决方案代码

childlistview.setOnTouchListener(new ListView.OnTouchListener() {


        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            int action = event.getAction();
            switch (action) {
            case MotionEvent.ACTION_DOWN:
            v.getParent().requestDisallowInterceptTouchEvent(true);
            break;

            case MotionEvent.ACTION_UP:
            v.getParent().requestDisallowInterceptTouchEvent(false);
            break;
            }

            v.onTouchEvent(event);
            return false;
        }
        });

它解决了这个问题。但是我无法理解这段代码。任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

在您的情况下,Scrollview是父级,而ListView是其子级。

因此,在您尝试滚动的正常情况下,ScrollView将截取该事件,并且会发生ScrollView的滚动。它不会到达ListView内,因为它已由父ScrollView处理。

但是,当您将TouchListener设置为子ListView并覆盖其onTouch()时,会发现不同的行为。

 case MotionEvent.ACTION_DOWN: 

当第一根手指按在屏幕上时会发生此事件。

  v.getParent().requestDisallowInterceptTouchEvent(true);

这将阻止父母拦截触摸事件,以便孩子可以适当地处理事件。

  case MotionEvent.ACTION_UP:

当所有手指离开屏幕时,此事件将触发。

  v.getParent().requestDisallowInterceptTouchEvent(false);

这将允许家长拦截之后的触摸事件,其余的屏幕离开子视图。

希望它对你有所帮助。

答案 1 :(得分:0)

v.getParent().requestDisallowInterceptTouchEvent(true);

它只是禁用了孩子View的父触摸。在您的情况下,它禁用父视图(ScrollView)触摸子视图(v)。

如果您想要启用父触摸,只需将false传递给相同的方法。

希望它能清除你的怀疑。