RecyclerView设置EmptyView

原创 2017年09月23日 13:52:23

网上百度了很多方法但是不靠谱,本篇博客代码亲测可用

1 布局设置

注意一定要在activity_main布局中设置你的emptyview布局,不管是使用include还是直接把代码拷贝到这里,必须要这样设置,否则无法显示

<?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"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.slidedelete.MainActivity">

    <FrameLayout
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent">
        <com.slidedelete.EmptyRecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <RelativeLayout
            android:id="@+id/empty"
            android:visibility="gone"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <ImageView
                android:id="@+id/iv_empty"
                android:layout_width="70dp"
                android:layout_height="70dp"
                android:layout_centerInParent="true"
                android:src="@mipmap/ic_launcher"
                android:layout_marginBottom="10dp"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/iv_empty"
                android:layout_centerInParent="true"
                android:gravity="center"
                android:text="暂时还没有内容哦"
                />

        </RelativeLayout>
    </FrameLayout>


</android.support.constraint.ConstraintLayout>

这里写图片描述

看到这幅图大家就明白怎么回事了,实际项目中需要把emptyview android:visibility=”gone”

2 构造一个EmptyRecyclerView

package com.slidedelete;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by Administrator on 2017/9/22.
 */

public class EmptyRecyclerView extends RecyclerView {
    private View emptyView;
    private static final String TAG = "LosingCarryJie";
    final private AdapterDataObserver observer = new AdapterDataObserver() {
        @Override
        public void onChanged() {
            checkIfEmpty();
        }

        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            checkIfEmpty();
        }

        @Override
        public void onItemRangeRemoved(int positionStart, int itemCount) {
            checkIfEmpty();
        }
    };

    public EmptyRecyclerView(Context context) {
        super(context);
    }

    public EmptyRecyclerView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EmptyRecyclerView(Context context, AttributeSet attrs,
                             int defStyle) {
        super(context, attrs, defStyle);
    }

    private void checkIfEmpty() {
        if (emptyView != null && getAdapter() != null) {
            final boolean emptyViewVisible = getAdapter().getItemCount() == 0;
            emptyView.setVisibility(emptyViewVisible ? VISIBLE : GONE);
            setVisibility(emptyViewVisible ? GONE : VISIBLE);
        }
    }

    @Override
    public void setAdapter(Adapter adapter) {
        final Adapter oldAdapter = getAdapter();
        if (oldAdapter != null) {
            oldAdapter.unregisterAdapterDataObserver(observer);
        }
        super.setAdapter(adapter);
        if (adapter != null) {
            adapter.registerAdapterDataObserver(observer);
        }
        checkIfEmpty();
    }

    public void setEmptyView(View view) {
        this.emptyView = view;
        checkIfEmpty();
    }
}

3 代码

在你需要设置emptyview布局地方

 recyclerView.setEmptyView(emptyview);

具体使用有什么问题,欢迎博客下方留言~

版权声明:本文为博主原创文章,未经博主允许不得转载。

为RecyclerView设置emptyView

RecyclerView不像ListView,它没有提供emptyView的支持,但我们可以自己来实现这个功能。解决思路通过监听Adapter中数据的变化,当数据为空时让我们自定义的emptyView...
  • u011504118
  • u011504118
  • 2016年01月24日 00:19
  • 4078

自定义RecyclerView 实现EmptyView展示

转至:http://blog.csdn.net/whitley_gong/article/details/51244723 一、前言 最近在用RecyclerView的时候...
  • h183288132
  • h183288132
  • 2016年08月04日 14:56
  • 424

Recyclerview设置emptyview需要注意的问题

由于Recyclerview没有setEmptyView的方法,因此必须重写有关方法: public class EmptyRecyclerView extends RecyclerView { ...
  • Accelerator_YiFang
  • Accelerator_YiFang
  • 2017年05月22日 19:59
  • 1159

RecyclerView添加EmptyView

最近在用RecyclerView的时候,竟然发现它不可以像以前使用listView或者gridView时,当列表为空时,显示一个特殊的empty view来提示用户。没关系,o(^▽^)o,我们可以自...
  • whitley_gong
  • whitley_gong
  • 2016年05月02日 14:46
  • 14492

RecyclerView的 setEmptyView

public void setEmptyView(View emptyView) { this.emptyView = emptyView; checkIfEmpty(...
  • f704084109
  • f704084109
  • 2016年04月29日 08:05
  • 2331

Android RecyclerView通用适配器,支持Header、Footer、LoadMore、EmptyView等功能

前言RecyclerView已经发布很久了,高度的解耦性和灵活的定制性使得其一经发布就广受好评,但在使用过程中会发现,编写适配器的代码量貌似有点多,而且不支持添加HeaderView、FooterVi...
  • lwk520136
  • lwk520136
  • 2017年04月26日 11:36
  • 976

关于AdapterView中EmptyView的使用,记录而已

当我们使用ListView或者GridView的时候,当网络没有连接或者网络状况不好超时出错,或者后台数据为空时,经常会出现没有数据的情况。此时如果空荡荡的一个页面,会显得不是很友好。所以,我们需要有...
  • Moy01
  • Moy01
  • 2015年08月25日 10:20
  • 583

【Android】使RecyclerView 支持setEmptyView

自定义一个RecyclerView 的子类,使其支持EmptyView机制。 public class EmptyRecyclerView extends RecyclerView { pri...
  • u011511368
  • u011511368
  • 2016年07月27日 17:16
  • 576

实战EmptyView,为ListView的加载缓冲

前言在我们的大多数应用中,会用到ListView,而ListView的数据,有时候是来自网络或者耗时操作之后得到的,这时候,有必要在数据显示之前提供一个友好的提示,结合上一篇文章的Android实战页...
  • sbsujjbcy
  • sbsujjbcy
  • 2015年06月20日 17:01
  • 3929

ListView RecyclerView使用EmptyView

ListView和自定义的Recycleview实现 使用的常规方法一致:package com.sunstar.cloudseeds.custom;import android.conten...
  • RichieZhu
  • RichieZhu
  • 2016年08月17日 09:52
  • 1813
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RecyclerView设置EmptyView
举报原因:
原因补充:

(最多只允许输入30个字)