Я занимаюсь рефакторингом страницы профиля в моем проекте.Страница профиля (экран) является фрагментом.Он имеет 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