Подтвердить что ты не робот

Android: RecyclerView внутри ScrollView

У меня есть RecyclerView, завернутый в LinearLayout, и он отлично работает, как ожидалось. Я могу видеть все данные в RecyclerView как заполненные. Пока все хорошо.

Когда я завершаю LinearLayout в ScrollView, RecyclerView исчезает. Я ничего не вижу внутри RecyclerView. Зачем? Как сделать эту работу.

Страница является одной из вкладок в ViewPagerIndicator, поэтому все на этой вкладке должно быть в ScrollView.

Спасибо за помощь.

4b9b3361

Ответ 1

Установите это свойство для ScrollView,

 android:fillViewport="true"

ScrollView будет расширяться, чтобы заполнить содержимое

Ответ 2

После проверки реализации причина заключается в следующем. Если RecyclerView вводится в ScrollView, то во время шага измерения его высота не указывается (потому что ScrollView разрешает любую высоту) и, как результат, получает равную минимальную высоту (согласно реализации), которая, по-видимому, равна нулю.

У вас есть несколько вариантов для этого:

  • Установите определенную высоту на RecyclerView
  • Установите ScrollView.fillViewport в true
  • Или сохраните RecyclerView вне ScrollView. По-моему, это лучший вариант. Если высота RecyclerView не ограничена - это случай, когда она помещается в ScrollView - тогда все виды адаптеров имеют достаточно места вертикально и создаются сразу. В настоящее время нет никакой утилизации просмотра, которая как бы нарушает цель RecyclerView.

Ответ 3

Ничего не помогло мне, кроме этого:

mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        int action = e.getAction();
        switch (action) {
        case MotionEvent.ACTION_MOVE:
            rv.getParent().requestDisallowInterceptTouchEvent(true);
            break;
    }
    return false;
}

@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {

}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
});

Я получил этот ответ там. Спасибо Пиюш Гупта за это.

Ответ 4

Надеюсь это поможет:

Добавьте эту строку в свой recyclerView xml:

android:nestedScrollingEnabled="false"

Попробуйте, и окно повторного просмотра будет плавно прокручиваться с гибкой высотой внутри прокрутки.

Ответ 5

Использование RecyclerView внутри ScrollView не является хорошей практикой.

Когда RecyclerView переносит свой контент, он больше не перерабатывается. Каждая запись в наборе данных имеет элемент View, сохраняемый в памяти до тех пор, пока RecyclerView находится в иерархии макета.

Узнайте больше здесь - https://android.jlelse.eu/android-dev-tip-4-91b7757b1f0a