Android之RecyclerView之空数据提示

本文介绍了如何在Android的RecyclerView中实现空数据提示。通过理解RecyclerView.ViewHolder的onCreateViewHolder方法和getItemViewType方法,作者发现可以通过返回不同的viewType来处理空数据情况。在获取条目数量时,通过修改getItemCount()的返回逻辑,确保即使数据为空,也会显示一条用于提示的条目。

   RecyclerView是android-support-v7-21版本中新增的一个Widget,官方介绍RecyclerView 是 ListView 的升级版本,更加先进和灵活。

查看ViewHolder重写方法时,发现有意思的地方。创建ViewHolder时,调用RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType),只是知道调用这个方法,创建ViewHolder,但是对第二个参数置之不理,也不知道这个参数的意思。在ViewHolder重写的方法中,有这么个方法, int getItemViewType(int position),默认的返回值为0。现在才知道onCreateViewHolder方法中参数是在这里获取到的,表示某个条目的类型。尝试在这里做下处理,看看能不能达到想要的效果。还真出现了意外的惊喜,空数据提示实现了。

private static final int VIEW_TYPE = -1;
	/**
     *  获取条目 View填充的类型
     *  默认返回0
     *  将lists为空返回-1
     * @param position
     * @return
     */
    public int getItemViewType(int position) {
        if (lists.size() <= 0) {
            return VIEW_TYPE;
        }
        return super.getItemViewType(position);
    }
</pre><pre name="code" class="java"><span style="font-family:SimSun;font-size:18px;">   既然对ViewType做了处理,在创建ViewHolder时,也需要针对不同的ViewType做相应处理.</span><span style="font-family:Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">/**</span>
     *  创建ViewHolder
     * @param viewGroup
     * @param viewType
     * @return
     */
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int  viewType) {
        View view;
        LayoutInflater inflater = LayoutInflater.from(context);

        if (VIEW_TYPE == viewType) {
            view = inflater.inflate(R.layout.item_empty, viewGroup, false);

            return new MyEmptyHolder(view);
        }

        view = inflater.inflate(R.layout.item_test, viewGroup, false);

        return new MyHolder(view);
    }
    
     /**
     *  将数据绑定到ViewHolder上
     * @param viewHolder
     * @param position
     */
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

        if (viewHolder instanceof MyHolder) {
            ((MyHolder) viewHolder).tv_test.setText(lists.get(position));
        }
    }
 

在调用int getItemCount() ,获取条目数量时,我们习惯这么写return lists.size <= 0 ? 0 : lists.size(); 如果这么写,空数据提示,依然没显示出来。如果这样写,表示空数据时,条目数量为0。需要改成 return lists.size() > 0 ? lists.size() : 1;表示即使空数据,也显示一条条目。


第一次写博客,不足之处,敬请谅解。有问题,大家一起探讨!

源码下载地址:点击打开链接

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值