列表视图仅在屏幕旋转时显示第一项



我正在开发一个Android应用程序,目前我的片段布局有问题。

这个布局由一个NestedScrollView组成,其中包括一个TextViews和ListViews的LinearLayout

当我的屏幕处于垂直位置时,一切正常。我的问题是,当我旋转屏幕时,只显示每个ListView的第一项,而不是整个内容。

这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.memory.MemoryFragment"
android:gravity="center"
android:background="@color/white"
android:fillViewport="true">
<LinearLayout
android:focusableInTouchMode="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_icmanuf_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grey"
android:padding="8dp"
android:text="@string/ic_manufacturer"
android:textAlignment="textStart"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/tv_icmanuf_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:text=""
android:textAlignment="textStart"
android:textSize="16sp" />
<TextView
android:id="@+id/tv_ids_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grey"
android:padding="8dp"
android:text="@string/uid"
android:textAlignment="textStart"
android:textColor="@color/white"
android:textSize="16sp" />
<ListView
android:id="@+id/lv_ids"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:dividerHeight="0dp" />
<TextView
android:id="@+id/tv_suptech_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grey"
android:padding="8dp"
android:text="@string/supported_technologies"
android:textAlignment="textStart"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/tv_suptech_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:text=""
android:textAlignment="textStart"
android:textSize="16sp" />
<TextView
android:id="@+id/tv_andtech_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grey"
android:padding="8dp"
android:text="@string/android_technologies"
android:textAlignment="textStart"
android:textColor="@color/white"
android:textSize="16sp" />
<ListView
android:id="@+id/lv_andtech"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:dividerHeight="0dp" />
<TextView
android:id="@+id/tv_originsign_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grey"
android:padding="8dp"
android:text="@string/originality_check"
android:textAlignment="textStart"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/tv_originsign_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:text=""
android:textAlignment="textStart"
android:textSize="16sp" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>

首先,我想说的是,根据ScrollView的文档(NestedScrollView也是),他们说:

切勿将回收器视图或列表视图添加到滚动视图。这样做会导致用户界面性能不佳和用户体验不佳。

所以你应该避免这样做。

其次,当嵌套滚动视图中的内容大于屏幕时,列表视图将仅显示 1 个项目。您在垂直模式下收到的成功行为是假的,因为内容没有溢出。

如果你真的想要在NestedScrollView中有一个ListView,你必须设置ListView的高度,例如:200dp,这导致你必须滚动才能看到它的全部内容。这是有道理的,因为如果您的列表视图可以一次显示所有项目,则无需从一开始就将其包含在 NestedScrollView 中。

最新更新