【问题标题】:How to work, when listview inside the scrollview?滚动视图中的列表视图时如何工作?
【发布时间】:2013-02-10 07:47:49
【问题描述】:

我在 Android 1.6 和 2.2 中这样做 ...

我在Activity中有一个ScrollView(ScrollView中的所有内容)...

第二个是,Activity 中有一个 ListView ....

当我滚动 ListView 时,当时 ScrollView 正在滚动,但 ListView 的 Scroll 不起作用 ...

我提供我遇到的问题scatch ...

如果有人对此有解决方案,请分享...

【问题讨论】:

标签: android listview android-activity scroll scrollview


【解决方案1】:

这里 parentScroll = 你的主滚动视图 和 childScroll = 你的列表视图

parentScroll.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    Log.v("PARENT", "PARENT TOUCH");
                    findViewById(R.id.child_scroll).getParent()
                            .requestDisallowInterceptTouchEvent(false);
                    return false;
                }
            });

  childScroll.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    Log.v("CHILD", "CHILD TOUCH");
                    // Disallow the touch request for parent scroll on touch of
                    // child view
                    v.getParent().requestDisallowInterceptTouchEvent(true);
                    return false;
                }
            });

【讨论】:

  • @kyogs : 非常感谢 :) 非常适合我。
  • 像魅力一样工作:)
  • @kyogs 我喜欢你的回答,它也很有效。我有一个回收器视图,该回收器视图的第一项是包含文本视图的嵌套滚动视图。现在使用您的代码,我可以同时滚动 textview 和 recyclerView,但仅当从 nestedScrollView 内的空白区域滚动时,textview 才会滚动。如果我滚动触摸文本字段时想要滚动事件该怎么办
  • 但它阻止了 childScroll 滚动
  • @kyogs 完美答案!谢谢一百万
【解决方案2】:
   svView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            switch (action) {
            case MotionEvent.ACTION_DOWN:
                // Disallow ScrollView to intercept touch events.
                v.getParent().requestDisallowInterceptTouchEvent(true);
                break;

            case MotionEvent.ACTION_UP:
                // Allow ScrollView to intercept touch events.
                v.getParent().requestDisallowInterceptTouchEvent(false);
                break;
            }

            // Handle ListView touch events.
            v.onTouchEvent(event);
            return true;
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    相关资源
    最近更新 更多