您的位置:首页 > 移动开发 > Android开发

Android之RecyclerView之空数据提示

2015-10-28 22:07 429 查看
   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;表示即使空数据,也显示一条条目。





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

源码下载地址:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: