замораживание экрана - просмотр списка в скроллвид андроид - PullRequest
1 голос
/ 22 июня 2011

Я прочитал несколько блогов \ так \ сообщений на форуме и вижу, что существует определенная проблема с помещением 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 ]

2 голосов
/ 23 июня 2011

Прежде всего ListView не должен быть вставлен в ScrollView.Помещение вашего ListView в LinearLayout позволяет вам отображать его, но ScrollView съедает все события вертикальной прокрутки, поэтому ваш ListView никогда не получает никаких событий касания.

Возможно, вы захотите поиграть с ViewGroup.html # onInterceptTouchEvent (android.view.MotionEvent) .

0 голосов
/ 23 июня 2017

Если вы используете Listview внутри Scrollview - Scroll зависает

listview.setEnabled(false);

Если вы используете Recyclerview внутри Scrollview - Scroll зависает

Почему экран зависает: Recyclerview имеет поведение прокрутки и вы пытаетесь поместить в один Scrollview [Который уже имеет поведение прокрутки] Так что путает, какой свиток следовать Используйте этот код, чтобы отключить прокрутку для повторного просмотра, поэтому он использует только прокрутки SCROLLVIEW

yourScrollview.setNestedScrollingEnabled(false);

Примечание: Если вы используете несколько просмотров / списков переработчика в одном упражнении вам нужно отключить прокрутки для всех просмотров / списков переработчиков

0 голосов
/ 23 июня 2011

Я изменил макет 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;
            }
                      }
    });
0 голосов
/ 23 июня 2011

положить их внутрь

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


</LinearLayout>
...