显示带有加载动画的空列表项,直到在 android 中加载整个列表

Show empty list items with loading animation until the whole list is loaded in android

我想实现这样的目标

还有这个

我怎样才能像在 udemy 中一样显示这种空列表,并结合一些像在 snapchat 中那样的动画,直到加载整个列表

既然你解释得更好了,我正在编辑这个答案。

为了执行与 SkyScanner 类似的操作,显示虚假占位符,因为您无法检索有关数据的任何先前信息,您必须执行以下步骤:

  • 有关动画,请查看 Lottie 库,您可以制作非常好的动画,并使此动画 运行 循环,直到您收到呼叫响应,请在此处查看库: https://github.com/airbnb/lottie-android Lottie 是制作矢量动画的好方法,它使用 json 文件,所以它真的很轻,但你当然也可以用旧样式制作动画。

  • 占位符的逻辑是这样的:你要切换数据集的内容,adapter要检查数据集里面的内容是不是真实数据的那种你想显示它将填充真实的 xml 并使用真实的 recyclerview 持有者,如果那种不是真实的数据你要用占位符 xml 膨胀行(相同的大小和配置以实现您正在寻找的结果)和一个新的 recyclerview holder for placeholder 以便您可以控制行行为,例如控制您的动画或基于位置的插层对象行为。

将对象 YourCustomObject 视为真实数据的持有者,但可以是任何类型,只要您为假占位符做不同类型的数据,适配器内部的逻辑是这样的:

@Override
public int getItemViewType(int position) {
    return mDataSet.get(position) instanceof YourCustomObject ? VIEW_TYPE_DATA : VIEW_TYPE_PLACEHOLDER;
}

然后

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RecyclerView.ViewHolder holder;
    if (viewType == VIEW_TYPE_DATA) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_real_data, parent, false);
        holder = new RealDataHolder(v);
    } else {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_placeholder, parent, false);
        holder = new PlaceholderHolder(v);
    }
    return holder;
}

不要忘记在 onBindViewHolder 上检查 Holder 的类型

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof RealDataHolder) {
YourCustomObject data = (YourCustomObject) dataSet.get(position);
(...)

不要忘记在适配器内部您的数据集是一个对象列表 (java class)

希望对您有所帮助。