关于RecyclerView(二)设置EmptyView

  1. 首先重写一个RecyclerView类
package com.onepilltest.others;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

public class MyRecyclerView extends RecyclerView {

    private View emptyView;
    private static final String TAG = "EmptyRecyclerView";


    //数据监听者
    final private AdapterDataObserver adapterDataObserver = new AdapterDataObserver() {
        @Override
        public void onChanged() {
            checkIfEmpty();
        }

        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            Log.i(TAG, "onItemRangeInserted" + itemCount);
            checkIfEmpty();
        }

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

    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(@Nullable Adapter adapter) {
        final Adapter oldAdapter = getAdapter();
        if (oldAdapter != null) {
            oldAdapter.unregisterAdapterDataObserver(adapterDataObserver);
        }
        super.setAdapter(adapter);
        if (adapter != null) {
            adapter.registerAdapterDataObserver(adapterDataObserver);
        }

        checkIfEmpty();
    }

    //设置没有内容时,提示用户的空布局
    public void setEmptyView(View emptyView) {
        this.emptyView = emptyView;
        checkIfEmpty();
    }

    public MyRecyclerView(@NonNull Context context) {
        super(context);
    }

    public MyRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public MyRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
}

  1. 然后在activity中添加一个ImageView作为数据为空时显示的图片
<!--Empty提示图-->
    <ImageView
        android:id="@+id/empty_iv"
        android:layout_margin="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:contentDescription="@null"
        android:src="@drawable/empty"
        android:layout_centerInParent="true" />
  1. 最后添加下面的代码即可
    1. 找到相应的ImageView
    2. 调用setEmptyView方法
recyclerView.setEmptyView(mEmptyView);
  1. 显示

有数据:

数据为空:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
RecyclerView可以通过设置ItemDecoration来设置行间隔。具体实现步骤如下: 1. 创建一个类,继承自RecyclerView.ItemDecoration。 2. 在类中重写getItemOffsets()方法,设置每个ItemView的偏移量。 3. 在getItemOffsets()方法中,可以通过outRect参数设置ItemView的padding值,从而实现行间隔的效果。 下面是一个示例代码,演示如何设置RecyclerView的行间隔: ``` public class MyItemDecoration extends RecyclerView.ItemDecoration { private final int mVerticalSpaceHeight; public MyItemDecoration(int verticalSpaceHeight) { this.mVerticalSpaceHeight = verticalSpaceHeight; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.bottom = mVerticalSpaceHeight; } } ``` 上面的代码中,我们创建了一个名为MyItemDecoration的类,它继承自RecyclerView.ItemDecoration。在类的构造方法中,我们传入了行间隔的高度mVerticalSpaceHeight。在getItemOffsets()方法中,我们通过outRect参数设置了每个ItemView的padding值,从而实现了行间隔的效果。 最后,在RecyclerView设置ItemDecoration即可生效,示例代码如下: ``` int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.spacing); mRecyclerView.addItemDecoration(new MyItemDecoration(spacingInPixels)); ``` 上面的代码中,我们通过getResources().getDimensionPixelSize()方法获取了行间隔的高度值,然后通过addItemDecoration()方法将MyItemDecoration类设置RecyclerView中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值