滚动列表视图项目在设备上不起作用

Scrolling over listview items not working on device

我想在屏幕上滚动部分数据,为此我在布局中添加了滚动视图,但列表视图没有滚动,它在模拟器中工作正常。我阅读了所有相关的文章,其中说列表视图滚动是不可能的,并尝试了设计自定义滚动的替代方案,但只有部分数据没有滚动。为什么会这样?没有其他选择?

我的布局是这样的

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">
   //few more layout items goes here
 <LinearLayout  android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ListView android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:divider="#00000000"
            android:dividerHeight="5dp"
            android:textStyle="bold"
            android:typeface="serif"
            />
        <LinearLayout  android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Total"
                android:textStyle="bold"
                android:textColor="#F5D8BA"
                android:layout_marginRight="30dp"
                android:layout_gravity="center"
                android:typeface="serif"
                />
       </LinearLayout>
 </LinearLayout>
</ScrollView>

listview里面的数据是这样的

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/scrollView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:layout_weight="1"
    >
<LinearLayout
    android:layout_width="75dp"
    android:layout_height="wrap_content" android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="12dp"
        android:textColor="#000000"
        android:text="TextView"
        android:textStyle="bold"
        android:typeface="serif"
        />

    <TextView
        android:id="@+id/textViewStyle"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="12dp"
        android:textColor="#000000"
        android:textStyle="bold"
        android:typeface="serif"
        />

</LinearLayout>
   </LinearLayout>
    </ScrollView>

背后的原因 - 你的列表视图在 ScrollView 里面

按照以下步骤解决您的问题-

ListView lv = (ListView)findViewById(R.id.landHoldingList);  // your listview inside scrollview
lv.setOnTouchListener(new ListView.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;
        }
    });

这样做是禁用 ScrollView 上的 TouchEvents 并使 ListView 拦截它们。它很简单并且一直有效。

同时从 ListView 数据中删除 ScrollView