越来越喜欢RecylerView了,尤其配合上CardView,界面简直就瞬间高大上了。。。。
先说个题外话,我的Android studio2.1.1,电脑还算可以,不过用AS经常电脑卡死!对,卡到任务管理器都开不了,点什么都没用。网上查了查。解决方法:setting--System setting--Updates--然后把两个选择框都取消了。果然解决了! 当然日常卡的话,不要管,喝点水回来就好了。。。
(公司电脑不能联网。。小代码就先直接贴出来了,以后把代码都搞Github上。看着不爽,还见谅了。。)
进入主题:本篇博文 分享的内容是用ItemTouchHelp类实现侧滑、拖动,headview和footview的添加(三种layoutmanager)、下拉刷新。
先来张效果图:
1.添加headerView、footerView
使用RecyclerView发现没有和listView一样的设置头,尾项的方法了。那好,咱们自己搞!条条大路通罗马。。
RecyclerView中有Type机制。有个type的回调方法--getItemViewType(position);
那好我们就来用Type机制。我们以添加个FooterView为例吧。
(1)思路:
1.再写一个ViewHolder,作为FooterView的Holder。
2.重写public int getItemViewType(int position);方法。这个方法中,根据position返回不同的Type。比如position为数据的最后一项时,返回Type为FooterView。
3.重写的public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)方法。这个方法中根据参数viewType,来返回不同的ViewHolder。
4.重写的public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)方法。通过holder instanceof XXViewHolder,来进行不同的item数据显示。
5.getItemCount()方法。可别忘记把新增的数量加上去。比如加了N个FooterView,就要+N;
好了,贴下几个方法具体代码了:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {
View inflate = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
return new MyViewHolder(inflate);
} else {
View inflate = LayoutInflater.from(mContext).inflate(R.layout.footer_item, parent, false);
return new FooterHolder(inflate);
}
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) {
return TYPE_FOOTER;
}
return TYPE_ITEM;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MyViewHolder) {
((MyViewHolder) holder).setContentText(datas.get(position));
((MyViewHolder) holder).setDateText("2020-09-0" + position);
((MyViewHolder) holder).setItemClick();
((MyViewHolder) holder).setItemLongClick();
((MyViewHolder) holder).setImage();
} else if (holder instanceof FooterHolder) {
}
}
@Override
public int getItemCount() {
return datas.size() + 1;
}