1.SmartRefreshLayout介绍

  SmartRefreshLayout的目标是打造一个强大,稳定,成熟的下拉刷新框架,并集成各种的炫酷、多样、实用、美观的Header和Footer。 正如名字所说,SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。 它继承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout, 其他第三方的 Ultra-Pull-To-Refresh、TwinklingRefreshLayout 。 还集成了各种炫酷的 Header 和 Footer。

2.使用步骤

(1)在 build.gradle (app)中添加依赖

    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-26'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-26'//没有使用特殊Header,可以不加这行
implementation 'com.android.support:design:28.0.0'

(2)布局文件(使用SmartRefreshLayout和RecyclerView)

<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:scrollbars="vertical"
android:background="#fff" /> </com.scwang.smartrefresh.layout.SmartRefreshLayout>

(3)RecyclerView的item布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" > <TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="28dp"
android:textSize="16sp"
android:textStyle="bold"
android:text="hehe"/> </RelativeLayout>

(4)java后台

package com.example.administrator.test65smartrefreshlayout;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.footer.BallPulseFooter;
import com.scwang.smartrefresh.layout.listener.SimpleMultiPurposeListener; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { RecyclerView mRecyclerView;
MyAdapter mAdapter;
LinearLayoutManager mLayoutManager;
RefreshLayout refreshLayout; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView(); mRecyclerView = findViewById(R.id.my_recycler_view);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
mRecyclerView.setHasFixedSize(true);
mAdapter = new MyAdapter(getDatas());
mRecyclerView.setAdapter(mAdapter);
} private void initView() {
refreshLayout = findViewById(R.id.refreshLayout);
/**
* 设置不同的头部、底部样式
*/
// refreshLayout.setRefreshFooter(new ClassicsFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
// refreshLayout.setRefreshHeader(new BezierRadarHeader(this));
// refreshLayout.setRefreshHeader(new TwoLevelHeader(this));
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale)); refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true)); //设置样式后面的背景颜色
refreshLayout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white); //设置监听器,包括顶部下拉刷新、底部上滑刷新
refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener(){ @Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
mAdapter.refreshData(MoreDatas()); //下拉刷新,数据从上往下添加到界面上
refreshLayout.finishRefresh(1000); //这个记得设置,否则一直转圈
} @Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
mAdapter.loadMore(MoreDatas()); //上滑刷新,数据从下往上添加到界面上
refreshLayout.finishLoadMore(1000); //这个记得设置,否则一直转圈
}
}); } //原始的recyclerView数据
private ArrayList<String> getDatas() {
ArrayList<String> data = new ArrayList<>();
String temp = " item";
for(int i = 0; i < 15; i++) {
data.add(i + temp);
}
return data;
} //刷新得到的数据
private ArrayList<String> MoreDatas() {
ArrayList<String> data = new ArrayList<>();
String temp = "新加数据 ";
for(int i = 0; i < 6; i++) {
data.add(temp + i);
}
return data;
} public static class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { public ArrayList<String> datas = null; public MyAdapter(ArrayList<String> datas) {
this.datas = datas;
} //创建新View,被LayoutManager所调用
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_smartrefreshlayout_item,viewGroup,false);
ViewHolder vh = new ViewHolder(view);
return vh;
} //将数据与界面进行绑定的操作
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.mTextView.setText(datas.get(position));
} //获取数据的数量
@Override
public int getItemCount() {
return datas.size();
} //底部上拉刷新,数据直接在底部显示
public void loadMore(ArrayList<String> strings) {
datas.addAll(strings);
notifyDataSetChanged();
} //底部下拉刷新,数据直接从上往下添加数据,显示在顶部
public void refreshData(ArrayList<String> strings) {
datas.addAll(0, strings);
notifyDataSetChanged();
// notifyItemInserted(0); 一次只能加一项数据
} //自定义的ViewHolder,持有每个Item的的所有界面元素
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(View view){
super(view);
mTextView = view.findViewById(R.id.text);
}
}
}
}

3.效果图

032 Android智能下拉刷新框架-SmartRefreshLayout+RecyclerView的使用的更多相关文章

  1. Android智能下拉刷新加载框架—看这些就够了

    一些值得学习的几个下拉刷新上拉加载开源库 Android智能下拉刷新框架-SmartRefreshLayout 支持所有的 View(AbsListView.RecyclerView.WebView. ...

  2. Android 定制下拉刷新头部 Ultra Pull To Refresh

    我们看到手机中的各种APP的花样繁多的下拉刷新是不是有点心动呢,想着自己定制自己的专门的下拉刷新,市场上比如,58同城,京东,天猫,美团等下拉刷新都是在下拉头部执行帧动画,我最近看到一个APP,就是慕 ...

  3. Xamarin. Android实现下拉刷新功能

    PS:发现文章被其他网站或者博客抓取后发表为原创了,给图片加了个水印 下拉刷新功能在安卓和iOS中非常常见,一般实现这样的功能都是直接使用第三方的库,网上能找到很多这样的开源库.然而在Xamarin. ...

  4. Android 下拉刷新框架实现

    原文地址:http://blog.csdn.net/leehong2005/article/details/12567757 前段时间项目中用到了下拉刷新功能,之前在网上也找到过类似的demo,但这些 ...

  5. Android 解决下拉刷新控件和ScrollVIew的滑动冲突问题。

    最近项目要实现ScrollView中嵌套广告轮播图+RecyleView卡片布局,并且RecyleView按照header和内容的排列样式,因为RecyleView的可扩展性很强,所以我毫无疑问的选择 ...

  6. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

  7. android官方下拉刷新控件SwipeRefreshLayout的使用

    可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享. 简介:SwipeRefreshLayout组件只 ...

  8. android Android-PullToRefresh 下拉刷新

    1.github下载地址 原作者:  https://github.com/chrisbanes/Android-PullToRefresh 我自己的:  https://github.com/zyj ...

  9. Android --SwipeRefreshLayout 下拉刷新

    1.Layout <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/id_swipe_ly" an ...

随机推荐

  1. andriod studio命名规范

    标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...

  2. Kafka - 环境搭建

    一.概述 Kafka(官网地址)专为分布式高吞吐量系统而设计. Kafka往往工作得很好,作为一个更传统的消息代理的替代品. 与其他消息传递系统相比,Kafka具有更好的吞吐量,内置分区,复制和固有的 ...

  3. 深度学习面试题10:二维卷积(Full卷积、Same卷积、Valid卷积、带深度的二维卷积)

    目录 二维Full卷积 二维Same卷积 二维Valid卷积 三种卷积类型的关系 具备深度的二维卷积 具备深度的张量与多个卷积核的卷积 参考资料 二维卷积的原理和一维卷积类似,也有full卷积.sam ...

  4. Eclipse 搭建Struts2

    Eclipse版本 Mars Release (4.5.0) Struts版本 struts-2.5.20 下载地址:https://struts.apache.org/download.cgi#st ...

  5. PHP异步非阻塞fsockopen(本地可以非阻塞请求,服务器就一直执行异步的不成功) (未解决)

    index.php /** * php异步请求 * * @param $host string 主机地址 * @param $path string 路径 * @param $param array ...

  6. nrm -- 一键切换npm源

    0. 背景 先描述一下没有nrm时我们是怎样使用npm源的 查看npm源地址,终端中输入 npm config list 可以看到npm源 metrics-registry = "https ...

  7. linux下查看指定进程的所有连接信息(转)

    定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息.通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到,如果是主动与别的机器建立的连接信息则可以通过 lsof ...

  8. ES6 克隆对象 浅克隆:只能克隆原始对象自身的值,不能克隆它继承的值

    https://www.cnblogs.com/xbblogs/p/8954165.html return JSON.parse(JSON.stringify(origin)) 最早由Barbara ...

  9. tomcat的AJP(定向包协议)协议

    由于tomcat的html和图片解析功能相对其他服务器如apche等较弱,所以,一般都是集成起来使用,只有jsp和servlet服务交由tomcat处理,而tomcat和其他服务器的集成,就是通过aj ...

  10. ToggleButton 和 Switch

           界面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...