1

我阅读了几篇博客\so\forum 帖子,发现将 ListView 放入 ScrollView 显然存在问题。但是在某个地方我发现如果我在滚动视图中放置一个线性布局(作为列表)它应该可以工作,现在它可以工作了。下面是我的xml。但列表不会向上\向下滚动,它被冻结了......知道为什么吗?

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical" android:fillViewport="true">
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:orientation="vertical">
        <LinearLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:orientation="horizontal">

            <ListView android:id="@+id/listView1" android:layout_width="100dp"
                android:layout_height="wrap_content" android:background="@color/white"
                android:cacheColorHint="#00000000" />
            <HorizontalScrollView android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <ListView android:id="@+id/listView2" android:layout_width="wrap_content"
                    android:layout_height="wrap_content" android:background="@color/white"
                    android:cacheColorHint="#00000000" />
            </HorizontalScrollView>
        </LinearLayout>

    </LinearLayout>
</ScrollView>
4

4 回答 4

2

首先ListView不应该插入到ScrollView中。将 ListView 放在 LinearLayout 中允许您显示它,但 ScrollView 会吃掉所有垂直滚动事件,因此您的 ListView 永远不会收到任何触摸事件。

您可能想玩ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent)

于 2011-06-23T11:49:37.473 回答
0

把它们放在里面

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">


</LinearLayout>
于 2011-06-23T12:04:45.583 回答
0

我修改了 xml 布局,还修改了 onScroll 监听器。它现在工作得很好。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout android:layout_width="fill_parent"
    android:id="@+id/mainLayout" android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ListView android:id="@+id/listView1" android:layout_width="100dp"
        android:layout_height="wrap_content" android:background="@color/white"
        android:cacheColorHint="#00000000" android:smoothScrollbar="true"
        android:scrollbars="none" />
    <HorizontalScrollView android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ListView android:id="@+id/listView2" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:background="@color/white"
            android:cacheColorHint="#00000000" android:smoothScrollbar="true"
            android:scrollbarStyle="outsideOverlay" />
    </HorizontalScrollView>
</LinearLayout>

lv1.setOnScrollListener(new OnScrollListener() {
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            int index = firstVisibleItem;
            View v = view.getChildAt(0);
            int top = (null == v) ? 0 : v.getTop();
            Log.i("lv1","index:"+index+" top:"+top);
            lv1.setSelection(index);
            lv2.setSelectionFromTop(index, top);
        }

        public void onScrollStateChanged(AbsListView view, int scrollState) {
            String sState;
            switch (scrollState) {
            case OnScrollListener.SCROLL_STATE_FLING:
                sState = "Fling";
                break;
            case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                sState = "Touch Scroll";
                break;
            case OnScrollListener.SCROLL_STATE_IDLE:
                sState = "Idle";
                break;
            default:
                sState = "Unknown";
                break;
            }
                      }
    });
于 2011-06-23T13:23:34.373 回答
0

如果您在 Scrollview 中使用 Listview - 滚动冻结

listview.setEnabled(false);

如果您在 Scrollview 中使用 Recyclerview - 滚动冻结

为什么屏幕冻结:Recyclerview 具有滚动行为并且您尝试放入一个 Scrollview [已经具有滚动行为]

所以它混淆了跟随哪个滚动

使用此代码禁用 recyclerview 的滚动,因此它仅使用 SCROLLVIEW 滚动

yourScrollview.setNestedScrollingEnabled(false);

注意:如果您在同一活动中使用多个 recyclerviews/listviews,则需要禁用所有 recyclerviews/listviews 的滚动

于 2017-06-23T07:36:36.813 回答