当前位置: 首页 > 知识库问答 >
问题:

在ScrollView内的RecyclerView中,某些项目未显示

裴哲
2023-03-14

我在ScrollView中有一个这样的RecyclerView:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--other stuff-->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"/>

    </LinearLayout>

    <!--other stuff-->

</ScrollView>

RecyclerView的项目是一个相对布局,其中有一个EditText和其他视图。该相对布局编辑文本layout_height都是wrap_content。用户可以在没有任何长度/行限制的情况下输入到该编辑文本中,以便每个项目的高度都不同。

然后我发现Adapter中的getItemCount()返回真值,但onBindViewHolder()调用的时间错误(少于应有的时间),因此不足以显示所有项目。

我发现只有当我编写了recyclerView.setNestedScrollingEnabled(false)时才会发生这种情况。但是我不能删除这一行。因为如果我这样做了,RecyclView将无法流畅滚动,并且与ScrollViewScrollView本身内的其他视图不和谐。

这发生在6.0上,但不发生在4.1上。

我在这个页面与谷歌沟通:html" target="_blank">https://code.google.com/p/android/issues/detail?id=213914,他告诉我这是< code>RecyclerView的一个错误修复。您可以访问该页面,以便更好地理解问题和我的目标(那里有一个小的示例项目来显示问题)。即使现在我也不同意他的观点,我想解决这个问题。请帮忙,提前感谢。

共有3个答案

申屠新觉
2023-03-14

最好的解决方案是将多个视图保存在单个视图/视图组中,然后将该视图保存在SrcolView中。即。

格式-

<ScrollView> 
  <Another View>
       <RecyclerView>
       <TextView>
       <And Other Views>
  </Another View>
</ScrollView>

例如。

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView           
              android:text="any text"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"/>


        <TextView           
              android:text="any text"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"/>
 </ScrollView>

另一个例子是具有多个视图的ScrollView

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:orientation="vertical"
            android:layout_weight="1">

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/imageView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#FFFFFF"
                />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingHorizontal="10dp"
                android:orientation="vertical">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="@string/CategoryItem"
                    android:textSize="20sp"
                    android:textColor="#000000"
                    />

                <TextView
                    android:textColor="#000000"
                    android:text="₹1000"
                    android:textSize="18sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>
                <TextView
                    android:textColor="#000000"
                    android:text="so\nugh\nos\nghs\nrgh\n
                    sghs\noug\nhro\nghreo\nhgor\ngheroh\ngr\neoh\n
                    og\nhrf\ndhog\n
                    so\nugh\nos\nghs\nrgh\nsghs\noug\nhro\n
                    ghreo\nhgor\ngheroh\ngr\neoh\nog\nhrf\ndhog"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

             </LinearLayout>

        </LinearLayout>

</ScrollView>
沈飞跃
2023-03-14

在我的例子中,我用RelativeLayout替换了LineaLayout,解决了问题,所有项目都显示出来了。

郑松
2023-03-14

我自己找到了解决方案:将ScrollView替换为NestedScrollView并保留recyclerView.setNestedScrollingEnabled(false)。我不知道这是否是NestedScrollView的目的,但它有效。

通知:

    < Li > < code > nested scroll view 不是< code>ScrollView的子级,而是< code>FrameLayout的子级。 < li >这个解决方案也会带来一些自模拟< code > adjust size 的bug。
 类似资料:
  • 这是一个XML,当我使用ScrollViewRecyclerView,如果不在XML 那么原因是什么呢?

  • 我试图在一个对话框中的recyclerView中显示数据,数据是从HTTP请求获取的。 我验证了适配器是否获得了数据——我在适配器中打印了数组长度,结果很好,但由于某些原因它不会显示数据——我所能看到的只是一个空白区域,recyclerView应该在那里。 重要提示:该应用程序运行良好,运行时没有错误或其他问题,回收器视图不存在。 xmi文件:

  • 这是我现在面临的一个奇怪的问题。从我的应用程序中,我从JSON文件中从链接中获取数据,然后用Volley解析它。现在我想在一个看起来不起作用的RecyclerView上显示数据,我很高兴我的代码很好,但是有些东西似乎不起作用,我找不到它。 这是活动代码 HomeActivity.java: 这是我从适配器中扩展的布局,并从JSON文件中设置数据 和适配器类相关的代码,我猜: @Override p

  • 我在WordPress中生成一个有三层的菜单。我用代码来做: WordPress生成这样的菜单: 我必须将菜单分为两个菜单:在顶部的标题中,只有菜单的第一层可见。通过wp_nav_菜单的深度调用,这非常容易,而且效果很好。在侧边栏中,我想显示相应的第二级和第三级菜单(class.sub菜单下的所有内容),具体取决于标题中选择的内容。我尝试通过CSS通过两条简单的线来实现这一点: 不幸的是,这不起作

  • 我正在使用最新的支持设计(),23.2版本中的支持设计应该已经解决了ScrollView内部的RecyclerView问题。RecyclerView和ExpandableListView滚动都能很好地工作。但是当ExpandableListView太长时,我希望能够向上滚动布局,以便可以看到其余部分时,scrollview就无法工作。 片段: xml:

  • 我在StackOverflow上看到了一些类似的事件。然而,这些似乎都不适用于我的情况。我遇到的问题是,我的RecyclerView正在工作,但没有显示任何内容。我已经运行了多个测试,试图找出它不工作的原因,但所有测试都支持它正常工作的事实。 getItemCount中的日志返回3,这是正确的数字。我只是不明白为什么它没有显示。我回头看了我在以前的活动中做的回收器视图,它们都在一定程度上匹配(其他