如何在Android RecyclerView中实现内容占位符,就像在Facebook中一样?

如何在Android RecyclerView中实现内容占位符,就像在Facebook中一样?,android,android-recyclerview,Android,Android Recyclerview,在从服务器获取和解析数据之前,我希望在RecyclerView中为我的TextViews设置一个内容占位符 我所说的内容占位符,不是指默认文本或没有结果的文本。在网络上显示实际数据之前,请先看看Facebook是如何显示灰色动画块的。我想做到这一点 基本上是一种加载器,除非我的数据已经准备好显示(请不要建议我使用水平或旋转加载器)。 e、 g:我显示一个灰色块,一旦我的数据准备好显示,我将删除该块,然后显示文本 所有这些都需要在RecyclerView中完成。我希望我清楚我的需要 我如何做到这一

在从服务器获取和解析数据之前,我希望在
RecyclerView
中为我的
TextView
s设置一个内容占位符

我所说的内容占位符,不是指默认文本或没有结果的文本。在网络上显示实际数据之前,请先看看Facebook是如何显示灰色动画块的。我想做到这一点

基本上是一种加载器,除非我的数据已经准备好显示(请不要建议我使用水平或旋转加载器)。 e、 g:我显示一个灰色块,一旦我的数据准备好显示,我将删除该块,然后显示文本

所有这些都需要在
RecyclerView
中完成。我希望我清楚我的需要

我如何做到这一点

  • 我无法在
    RecyclerView
    中放置虚拟视图,因为除非我有数据,否则我的
    getCount
    将返回0,因此不会显示任何视图

  • 我不想显示一个虚拟的布局,当我得到实际的数据时,它就消失了,这看起来不干净

  • 这应该行得通

    <TextView android:id="@android:id/empty"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="No Results" />
    
    
    
    身份证起作用了

    您必须使用ListViewActivity才能使其工作

    如果不扩展ListViewActivity

    试试看


    ListView.setEmptyView()

    在不确切了解Facebook实现的情况下,我假设他们加载了一个初始数据源,其中包含“精益”数据,您可以根据这些数据判断需要显示多少单位,您可以创建一个占位符(这将是您的
    RecyclerView
    中的一种类型),加载该占位符的完整数据后,您将通知数据集更改并用完整项替换占位符(同样是
    RecyclerView
    中的另一种类型)

    基本上是一种加载器,除非我的数据已经准备好显示


    例如,如果您完全没有数据,您没有将显示的“块”数量,则无法显示占位符,因为如果从数据源返回了空数据集,占位符可能会被丢弃

    您需要创建骨架布局并在整个屏幕上充气。然后,可以使用不同的库添加微光效果

    drawable/skeleton.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
      <solid android:color="@color/skeleton"/>
    <corners android:radius="4dp"/>
    </shape>
    
    
    
    layout/skeleton_row_layout.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="@dimen/row_layout_height">
    
      <View
        android:id="@+id/icon"
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:layout_margin="15dp"
        android:layout_gravity="center_vertical"
        android:background="@drawable/skeleton"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
    
      <View
        android:id="@+id/topText"
        android:layout_width="200dp"
        app:layout_constraintTop_toTopOf="@id/icon"
        app:layout_constraintStart_toEndOf="@id/icon"
        android:layout_height="15dp"
        android:layout_marginLeft="16dp"
        android:background="@drawable/skeleton"/>
    
      <View
        android:id="@+id/bottomText"
        android:layout_width="250dp"
        android:layout_height="15dp"
        app:layout_constraintTop_toBottomOf="@id/topText"
        android:layout_marginTop="10dp"
        app:layout_constraintStart_toEndOf="@id/icon"
        android:layout_marginLeft="16dp"
        android:background="@drawable/skeleton"/>
    
      <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@drawable/skeleton"
        app:layout_constraintTop_toBottomOf="@id/icon"
        android:layout_marginTop="10dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>
    
    </android.support.constraint.ConstraintLayout>
    
    
    

    在TextView中添加提示您也可以在XML中添加默认文本。我不希望这样做。我想要将文本加载到其中的占位符。你有没有注意到facebook上的情况?那样。假设显示一些块&当内容准备好时,它就会显示到其中。我不想要默认文本。我说我希望它和facebook相似。请看一下facebook数据是如何加载的。你能再解释一下吗?我不明白。你到底想要什么。把你想做的facebook的图片放进去。我不想这样。我想要将文本加载到其中的占位符。你有没有注意到facebook上的情况?那样。比如说一些块显示&然后当内容准备好时,它就会显示到其中。哦!很抱歉我在匆忙中没有正确阅读。我会试试这个。我正在使用AppCompativeActivity和RecyclerView。我不能改变它。完整的应用程序在许多地方都使用此功能。请尝试不使用ListViewActivity,如果它不起作用,还有其他方法可以使用it@AishwaryaTiwari所以决定:那么您希望它出现在
    列表视图
    RecylerView
    ?另外,我认为没有人确切知道你想要实现什么……嘿,谢谢你的想法。我也想到了类似的事情。将立即开始实施。:)我认为如果你明确地透露你是那篇博文的作者,那可能是件好事。否则,它可能会被视为非法的自我推销(我不是说它是)。也许你想看看这里的最后一部分:它回答了这个问题,并且非常详细,我补充说我写了教程。非常感谢。