Как показать несколько просмотров Recycler с динамическим содержимым во фрагменте ViewPager, который находится внутри Scrollview - PullRequest
0 голосов
/ 08 июля 2019

Я занимаюсь рефакторингом страницы профиля в моем проекте.Страница профиля (экран) является фрагментом.Он имеет NestedScrollView, который содержит ViewPager (viewpager имеет 2 вкладки и 2 фрагмента).первая вкладка (фрагмент) показывает 3 различных просмотра переработчика, ограниченные 3 элементами или строками в каждом представлении переработчика.Каждый просмотрщик внутри другого фрагмента.На верхнем ресивере отображается карта в горизонтальном стиле, а остальные - в вертикальном.

Нижний просмотр повторного вызова вызывает api для получения данных и заполнения элементов, но он не расширяется и не отображает содержимое вообще после успешного извлечения элементов (отображает содержимое, если высота постоянна).

Верхнее окно повторного просмотра (горизонтальное), которое также вызывает API для получения данных и заполнения элементов, это нормально отображаемый код, если он установлен в LinearLayoutManager.VERTICAL.Проблема в том, что он не будет ничего показывать, если он установлен в HORIZONTAL.

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

Если я задаю высоту окна просмотра, например, 1000dp.отображение данных повторов просмотра работает нормально, но, очевидно, в нижней части фрагмента окна просмотра есть дополнительное пространство.Если мы сделаем это wrap_content, то в верхнем (горизонтальном) и нижнем (вертикальном) обзорах не будут отображаться данные.

Примечание: каждый просмотр Recycler снова находится внутри фрагмента.таким образом, внутри фрагмента окна просмотра есть три фрагмента

пробовал nestedScrollingEnabled = true и расширенный просмотрщик, который динамически измеряет высоту фрагмента.не работает для меня.

`class EnhancedWrapContentViewPager: ViewPager {

constructor(context: Context) : super(context) {}

constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    var heightMeasureSpec = heightMeasureSpec
    val mode = MeasureSpec.getMode(heightMeasureSpec)
    // Unspecified means that the ViewPager is in a ScrollView WRAP_CONTENT.
    // At Most means that the ViewPager is not in a ScrollView WRAP_CONTENT.
    if (mode == MeasureSpec.UNSPECIFIED || mode == MeasureSpec.AT_MOST) {
        // super has to be called in the beginning so the child views can be initialized.
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        var height = 0
        for (i in 0 until childCount) {
            val child = getChildAt(i)
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED))
            val childMeasuredHeight = child.measuredHeight 
            if (childMeasuredHeight > height) {
                height = childMeasuredHeight
            }
        }
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
    }
    // super has to be called again so the new specs are treated as exact measurements
    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}

}

<android.support.v4.widget.NestedScrollView
    android:id="@+id/scrollView2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:fillViewport="true">

             <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
               android:layout_marginBottom="@dimen/element_spacing_default"
                android:orientation="vertical">

                <android.support.design.widget.AppBarLayout
                    android:id="@+id/appBarLayout"
                    style="@style/Theme.Design.NoActionBar"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:elevation="0dp"
                    android:background="@color/white">

                    <android.support.design.widget.TabLayout
                        android:id="@+id/tabLayout"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:background="@color/white"
                        app:tabIndicatorColor="@color/black"
                        app:tabMode="fixed"
                        app:tabSelectedTextColor="@color/black"
                        app:tabTextAppearance="@style/tab_text_bold"
                        app:tabTextColor="@color/dark_grey" />

                </android.support.design.widget.AppBarLayout>


               <com.eatsleepride.esrandroid.ui.EnhancedWrapContentViewPager
                    android:id="@+id/viewpager"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />

            </LinearLayout>

</android.support.v4.widget.NestedScrollView>`

Я ожидаю, что содержимое Recyclerviews будет отображаться и автоматически расширятьсякогда размер увеличивается, чтобы мы могли прокручивать содержимое 3 Recyclerviews и используя NestedScrollView

...