如何允许在ViewPager的片段内垂直滚动ListView?

时间:2014-06-17 18:37:48

标签: android listview android-fragments android-listview

我有这个应用程序实现了一个ViewPager和一个包含6个页面的TabStrip。其中一个页面包含2个ListView。如果我水平滑动(无论我的手指在哪里,无论是在外面还是在ListViews上,我都应该可以在页面上滑动。但是如果我在任一ListView上垂直滑动,则滚动应限于特定的ListView只滚动列表中的项目。我当前的代码不起作用。水平滑动将我带到ViewPager中的下一个寻呼机,但是没有捕获列表视图中的垂直滚动。请看一看。任何帮助都会很棒。感谢。

屏幕截图的链接位于:https://plus.google.com/112121882360943840035/posts/LL2SBB3qPtf

ScrollView svParent = (ScrollView) rootView.findViewById(R.id.home_scrollview);
ListView lvSchedules = (ListView) rootView.findViewById(R.id.home_schedules_list);
lvSchedules.setAdapter(mSchedulesAdapter);

svParent.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                rootView.findViewById(R.id.home_schedules_list).getParent().requestDisallowInterceptTouchEvent(false);
                return false;
            }
        });

lvSchedules.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                float downXValue = 0;
                float downYValue = 0;
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    downXValue = event.getX();
                    downYValue = event.getY();
                }
                else if (event.getAction() == MotionEvent.ACTION_UP) {
                    float currentX = event.getX();
                    float currentY = event.getY();

                    // check if horizontal or vertical movement was bigger
                    if (Math.abs(downXValue - currentX) > Math.abs(downYValue - currentY)) {
                        // going backwards: pushing stuff to the right
                        if (downXValue < currentX) {
                            v.getParent().requestDisallowInterceptTouchEvent(false);
                            return false;
                        }
                        // going forwards: pushing stuff to the left
                        if (downXValue > currentX) {
                            v.getParent().requestDisallowInterceptTouchEvent(false);
                            return false;
                        }
                    } 
                    else {
                        if (downYValue < currentY) {
                            v.getParent().requestDisallowInterceptTouchEvent(true);
                            return true;
                        }
                        if (downYValue > currentY) {
                            v.getParent().requestDisallowInterceptTouchEvent(true);
                            return true;
                        }
                    }
                }
                return false;
            }
        });

---编辑---

重新构思我的问题...... 我有一个在ViewPager中有6页的应用程序。第一个页面,即主屏幕,有一个ScrollView作为父级,其中有2个ListView。使用现在修改过的代码,我可以在页面内以及&#34;时间表&#34;内部滚动。 ListView(它包含4个项目,其中1个项目在可视区域之外,因此需要在List中滚动)。

现在已经实现了列表内的垂直滚动和scrollview父级,我希望允许用户水平滑动&#34;在ListViews上并使ViewPager遍历到下一页,我不能这样做。我希望我现在有意义。这是编辑过的代码......

ScrollView svParent = (ScrollView) rootView.findViewById(R.id.home_scrollview);
ListView lvSchedules = (ListView) rootView.findViewById(R.id.home_schedules_list);
ListView lvInbox = (ListView) rootView.findViewById(R.id.home_inbox_list);

svParent.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        rootView.findViewById(R.id.home_schedules_list).getParent().requestDisallowInterceptTouchEvent(false);
        rootView.findViewById(R.id.home_inbox_list).getParent().requestDisallowInterceptTouchEvent(false);
        return false;
    }
});

lvSchedules.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.getParent().requestDisallowInterceptTouchEvent(true);
        return false;
    }
});

lvInbox.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.getParent().requestDisallowInterceptTouchEvent(true);
        return false;
    }
});

0 个答案:

没有答案