Как я могу получить свой список для прокрутки?

StackOverflow https://stackoverflow.com/questions/5312592

  •  24-10-2019
  •  | 
  •  

Вопрос

У меня довольно сложное наращивание представления, и в рамках этого у меня есть список Listearlayout в Scrollview (и гораздо больше компонентов, но они не имеют значения в этом вопросе).

Теперь, как и должно быть хорошо прокручивается в целом, но у ListView есть ограниченная высота, и когда элементы внутри него превосходят высоту, исчезновение моего экрана. Я пытался разместить ListView в свой собственный ScrollView, но это не работает. Когда я пытаюсь прокрутить ListView, выбран основной ScrollView, а мой экран прокручивает вместо ListView.

Мой вопрос может звучать легко, но я не смог это исправить ... возможно ли сделать прокручиваемые списки?

Соответствующий XML:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

    <LinearLayout android:id="@+id/GlobalLayout" 
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:orientation="vertical" >

        <ListView android:id="@+id/EndpointList"
                  android:choiceMode="multipleChoice"
                  android:layout_height="175dip"
                  android:layout_width="fill_parent" />

    </LinearLayout>

</ScrollView>
Это было полезно?

Решение 2

На самом деле, способ, которым я настраивает, действительно работает ... размещение списка в линейном виде в ScrollView. Просто избегайте того, чтобы ListView - это прямой ребенок ScrollView, и он сработает просто отлично ...

Просто имейте в виду, что если в списке недостаточно элементов, чтобы заполнить его, так что он выходит из «экрана», что он не прокручивает (хотя вроде логически). Также обратите внимание, что, когда у вас достаточно элементов для прокрутки, вам необходимо продолжать нажимать на элемент в ListView, чтобы он прокрутил, и половина времени фокус придается глобальному Scrollview вместо ListView ... to Избегайте этого (в большинстве случаев), продолжайте нажимать на самый верхний или наибольший элемент, в зависимости от того, как вы хотите прокрутить. Это оптимизирует ваш шанс сосредоточиться на вашем списке.

Я сделал видео, что это возможно, загружаю его сейчас на YouTube ...

Видео http://www.youtube.com/watch?v=c53oig_3lky. Анкет Качество довольно плохое, но это доказывает мою точку зрения.

Просто для глобального обзора, я использовал ScrollView, чтобы иметь возможность прокрутить всю свою деятельность, LineArlayout для макета деятельности и ListView, чтобы сделать список ...

Другие советы

Вместо ListView с другими макетами внутри ScrollView Создайте один ListView с заголовком и нижним колонтитулом.

Добавьте представления, которые должны быть выше ListView в качестве заголовка:

addHeaderView(View v)

и это ниже как нижний колонтитул:

addFooterView(View v)

Поместите все то, что должно быть выше ListView в заголовок ListView и то же самое с нижним файлом.

    LayoutInflater inflater = LayoutInflater.from(this);
    mTop    = inflater.inflate(R.layout.view_top, null);
    mBottom = inflater.inflate(R.layout.view_bottom, null);

    list.addHeaderView(mTop);
    list.addFooterView(mBottom);
    // add header and footer before setting adapter
    list.setAdapter(mAdapter);

В результате вы получите один прокрученный вид.

Попробуйте этот код может помочь вам

        ListView listView = ( ListView ) findViewById(R.id.lsvButton3);
        listView.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;
            }
        });

Я хотел бы просто отметить что -нибудь для видео

ListView работает один раз каждый X касается не потому, что вы помещали его в LineArlayout, а потому, что вы касаетесь разделителя ...

Затем в Scrollview будет рассмотрено, что в затрагиваемом вами месте нет детей, чтобы отправлять MotionEvent на ... так что оно называет Super.DispatchTouchEvent, который в этом случае является View.DispatchTouchView, следовательно, ListView.OntouchEvent.

Когда вы коснетесь строки, Scrollview, которая действительно является группой View, отправит отправку детям в вашем случае TextView и никогда не вызывает одну из просмотра, чтобы ListView не прокручивался.

Надеюсь, что мое объяснение было достаточно ясным, чтобы указать, почему он не работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top