RecyclerViewRefresh

作者: Jimmy5Zhang | 来源:发表于2016-08-06 22:47 被阅读404次

    采用RecyclerView和SwipeRefreshLayout实现下拉刷新和上拉自动加载更多

    1.下拉刷新

       //下拉刷新
       refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
           @Override
           public void onRefresh() {
               if(isAllowReadContacts){
                       handler.postDelayed(new Runnable() {
                           @Override
                           public void run() {
                               PAGE_NO = 0;
                               contactList = contactsHelper.getContactsByPage(PAGE_SIZE,PAGE_NO);
                               contactAdapter.setContactList(contactList);
                               refreshLayout.setRefreshing(false);
                           }
                       },1000);
                   }
               }
       });
    

    2.自动加载更多

       //加载更多
       recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
           boolean isSlidingToLast = false;
    
           @Override
           public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
               super.onScrollStateChanged(recyclerView, newState);
               if(isAllowReadContacts){
                   LinearLayoutManager linearLayoutManager = (LinearLayoutManager)recyclerView.getLayoutManager();
                   if(newState == RecyclerView.SCROLL_STATE_IDLE){
                       int lastVisibleItem = linearLayoutManager.findLastCompletelyVisibleItemPosition();
                       int totalItemCount = linearLayoutManager.getItemCount();
                       if (lastVisibleItem == (totalItemCount -1) && isSlidingToLast) {
                           if(isLoadMoreAble){
                               //加载更多功能的代码
                               isLoadMoreAble = false;
                               refreshLayout.setRefreshing(true);
                               if(null != contactList && !contactList.isEmpty()){
                                   PAGE_NO = contactList.get(contactList.size()-1).getOffset();
                               }
                               handler.postDelayed(new Runnable() {
                                   @Override
                                   public void run() {
                                       requestList = contactsHelper.getContactsByPage(PAGE_SIZE,PAGE_NO);
                                       if(null != requestList && !requestList.isEmpty()){
                                           if(null == contactList){
                                               contactList = new ArrayList<ContactVo>();
                                           }
                                           contactList.addAll(requestList);
                                       }
                                       contactAdapter.setContactList(contactList);
                                       isLoadMoreAble = true;
                                       refreshLayout.setRefreshing(false);
                                   }
                               },1000);
                           }
                       }
                   }
               }
           }
    
           @Override
           public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
               super.onScrolled(recyclerView, dx, dy);
               //dx用来判断横向滑动方向,dy用来判断纵向滑动方向
               if(dy > 0){
                   //大于0表示,正在向右滚动
                   isSlidingToLast = true;
               }else{
                   //小于等于0 表示停止或向左滚动
                   isSlidingToLast = false;
               }
           }
       });
    

    3.点击item实现

    (1).编写单击事件接口

       public interface RecyclerItemClickListener {
    
           /**
            * 监听点击item事件
            * @param view
            * @param position
            */
           public void onItemClick(View view, int position);
       }
    
    

    (2).在RecyclerView.Adapter里面添加监听

        class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    
               TextView contactNameTv,phoneNumberTv;
    
               public ViewHolder(View itemView) {
                   super(itemView);
                   contactNameTv = (TextView) itemView.findViewById(R.id.hteng_contact_name_tv);
                   phoneNumberTv = (TextView)itemView.findViewById(R.id.hteng_phone_number_tv);
                   itemView.setOnClickListener(this);
               }
    
               @Override
               public void onClick(View view) {
                   if(null != itemClickListener){
                       itemClickListener.onItemClick(view,getAdapterPosition());
                   }
               }
    
           }
    
    
           public void setOnItemClickListener(RecyclerItemClickListener itemClickListener) {
               this.itemClickListener = itemClickListener;
           }
    

    (3).实现点击item事件

       contactAdapter.setOnItemClickListener(new RecyclerItemClickListener() {
           @Override
           public void onItemClick(View view, int position) {
    
           }
       });
    

    (4).GitHub演示Demo

    下载源码
    如果觉得不错,不要忘记在github上点💚Star哦

    相关文章

      网友评论

        本文标题:RecyclerViewRefresh

        本文链接:https://www.haomeiwen.com/subject/fjtlsttx.html