RecyclerView的 item侧滑拖动、添加head、footview、下拉刷新。

越来越喜欢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;
    }

(2)兼容各种layoutManager:

还没结束。当我们把RecyclerView切换成 GridLayout或瀑布显示模式时。。。你发现当RecyclerView多列显示时,FooterView的宽只是占了一列,而讲道理宽不应该是整个列表的宽吗。。
1.解决瀑布layoutmanager:
我是先解决的GridLayoutManager,瀑布的 这个解决方法我是参考其他博客的,但是我个人觉得那种解决方法有待改善(当然个人技术有限,不一定就是好的,大家可以一起反馈下)。
a.首先说说我在网上看到的解决方法:
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值