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没有setEmptyView的方法,因此必须重写有关方法: public class EmptyRecyclerView extends RecyclerView { ...

为RecyclerView设置emptyView

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

RecyclerView添加EmptyView

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

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

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

ListView RecyclerView使用EmptyView

ListView和自定义的Recycleview实现 使用的常规方法一致:package com.sunstar.cloudseeds.custom;import android.conten...

判断Listview滑到顶部的最精准方案,解决Listview设置EmptyView与SwipeRefreshLayout冲突

故事发生的背景SwipeRefreshLayout是谷歌自家控件,提供下拉刷新的功能。然而这个控件简单易用的同时也有一个令人头疼的缺点,那就是它里面只能包含一个子View!有一天,需求来了,需要在为L...
  • TellH
  • TellH
  • 2016年02月14日 13:29
  • 3426

android设置ListView的EmptyView

效果如下图:   一般app的列表数据页都会考虑无数据时的情况,为了提升用户体验,在无数据时,都会给用户展示一个友好的页面,效果如上图;   这里如果用的是ListView,一般都会给List...
  • Aislli
  • Aislli
  • 2016年03月02日 11:15
  • 285

实战EmptyView,为ListView的加载缓冲

  • 2015年06月20日 17:07
  • 6.62MB
  • 下载

SwipeRefreshLayout和ListView的EmptyView共存冲突的问题

转载自:点击打开链接 SwipeRefreshLayout是android官方的下拉刷新控件; 它内部有且只能有一个子控件; 当一个ListView嵌入到它内部时,就不能为ListView带一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RecyclerView设置EmptyView
举报原因:
原因补充:

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