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;表示即使空数据,也显示一条条目。
第一次写博客,不足之处,敬请谅解。有问题,大家一起探讨!
源码下载地址:点击打开链接
本文介绍了如何在Android的RecyclerView中实现空数据提示。通过理解RecyclerView.ViewHolder的onCreateViewHolder方法和getItemViewType方法,作者发现可以通过返回不同的viewType来处理空数据情况。在获取条目数量时,通过修改getItemCount()的返回逻辑,确保即使数据为空,也会显示一条用于提示的条目。
5519

被折叠的 条评论
为什么被折叠?



