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. Luogu5349 幂

    题面 题解 首先考虑对于一个单项式怎么做,多项式就是单项式的答案的和. 就求一下\(\mathbf f(n) = n^k\)吧.(下面设\(t = \dfrac 1r\)) 设\(\mathbf S_ ...

  2. 中山纪中集训Day2又是测试(划水)

    A组T1 bzoj 2674 Attack Description chnlich 非常喜欢玩三国志这款游戏,并喜欢用一些策略出奇制胜.现在,他要开始征服世界的旅途了.他的敌人有N 座城市和N 个太守 ...

  3. ubuntu之路——day10.7 提高模型的表现

    总结一下就是在提升偏差的方面(即贝叶斯最优误差和训练误差的差距) 1.尝试更大更深的网络 2.加入优化算法比如前面提过的momentum.RMSprop.Adam等 3.使用别的神经网络架构比如RNN ...

  4. Java 面向对象(十五)

    Lambda表达式 1. 函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方案,也就是"拿什么东西做什么事情".相对而言,面向对象过分强调"必须通过对象的 ...

  5. JS实现文字向上无缝滚动轮播

    效果图: 全部代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  6. 正则表达式检测IP地址与端口号是否合法

    正则表达式检测IP地址与端口号是否合法,代码如下: 正则表达式检测IP地址 public static bool CheckAddress(string s) { bool isLegal = fal ...

  7. Java_jdbc 基础笔记之三 数据库连接 (Statement)

    /** * 通过JDBC向之指定的数据表中插入一条记录 1 Statement :用于执行SQL语句的对象 * ==>通过Connection的createStatement()方法来获取 == ...

  8. https://docs.huihoo.com/infoq/qconbeijing/2016/day1/工程效率提升专题/2-2-支持百度万人开发的工具装备及百度工程能力建设-夏仲璞.pdf

    https://docs.huihoo.com/infoq/qconbeijing/2016/day1/工程效率提升专题/2-2-支持百度万人开发的工具装备及百度工程能力建设-夏仲璞.pdf http ...

  9. qemu通过控制台向虚拟机输入组合键

    ctrl+alt+2 开启控制台 ctrl+alt+1 关闭控制台 在控制台中输入 sendkey ctrl-alt-delete 发送指令

  10. golang配置镜像站点

    In Linux or macOS, you can execute the below commands. Bash / # Enable the go modules feature export ...