Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView
在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下。
原文是 https://blog.csdn.net/huangxin112/article/details/78781682 ,这里是看了之后,结合自己实际遇到的问题写的。
首先引入包。
//下拉框
implementation 'com.android.support:recyclerview-v7:28.0.0-beta01'
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.3'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.3'//没有使用特殊Header,可以不加这行
recyclerview 是为了数据显示用,因为在使用中,发现 使用ListView 会报错,不过我看别人用成功了的,具体我也懒得去查了。
recyclerview 以后具体在学习吧,反正是个比较好用的东西就是了。
首先是页面文件 activity_main.xml
<com.scwang.smartrefresh.layout.SmartRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:background="#fff" /> </com.scwang.smartrefresh.layout.SmartRefreshLayout>
接着是具体的布局显示文件: item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center"> <ImageView
android:id="@+id/iv_image"
android:layout_width="60dp"
android:layout_height="60dp"
android:gravity="center"
android:background="@mipmap/ic_launcher"></ImageView> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="30dp"
android:text="title"
android:gravity="center"
></TextView> <TextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="30dp"
android:text="content1231231231232323"
android:gravity="center"
></TextView>
</LinearLayout> </LinearLayout>
显示的bean 对象,
package com.example.administrator.shuaxin;
public class ItemBean {
int itemImage;
String itemTitle;
String itemContent;
public ItemBean(int itemImage , String itemTitle, String itemContent) {
this.itemTitle = itemTitle;
this.itemContent = itemContent;
this.itemImage = itemImage;
}
}
适配器MyAdapter:
package com.example.administrator.shuaxin; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
private List<ItemBean> mList; static class ViewHolder extends RecyclerView.ViewHolder{
View myView;
ImageView imageView;
TextView title;
TextView content;
public ViewHolder(View itemView) {
super(itemView);
myView = itemView;
imageView = (ImageView) itemView.findViewById(R.id.iv_image);
title = (TextView) itemView.findViewById(R.id.tv_title);
content = (TextView) itemView.findViewById(R.id.tv_content);
}
} public MyAdapter(List<ItemBean> list){
this.mList = list;
} @Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,null);
final ViewHolder holder = new ViewHolder(view);
return holder;
} //将数据绑定到控件上
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
ItemBean bean = mList.get(position);
holder.imageView.setBackgroundResource(bean.itemImage);
holder.title.setText(bean.itemTitle);
holder.content.setText(bean.itemContent);
} @Override
public int getItemCount() {
return mList.size();
} //下面两个方法提供给页面刷新和加载时调用
public void add(List<ItemBean> addMessageList) {
//增加数据
int position = mList.size();
mList.addAll(position, addMessageList);
notifyItemInserted(position);
} public void refresh(List<ItemBean> newList) {
//刷新数据
mList.removeAll(mList);
mList.addAll(newList);
notifyDataSetChanged();
}
}
然后是Activity文件。
package com.example.administrator.shuaxin; import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import com.scwang.smartrefresh.layout.listener.OnLoadmoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.util.ArrayList;
import java.util.Date;
import java.util.List; public class MainActivity extends AppCompatActivity { private List<ItemBean> list;
private MyAdapter myAdapter;
private RecyclerView recyclerView;
RefreshLayout refreshLayout; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
//初始数据加载
initDate();
//刷新数据加载
setPullRefresher();
} private void initDate(){
list = new ArrayList<ItemBean>();
for (int i=0;i<20;i++){
list.add(new ItemBean(
R.mipmap.ic_launcher,
"initTitle"+i,
new Date().toString()+""
));
}
myAdapter = new MyAdapter(list);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);//纵向线性布局 recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(myAdapter);
} private void setPullRefresher(){
//设置 Header 为 MaterialHeader
//设置 Header 为 ClassicsFooter 比较经典的样式
refreshLayout.setRefreshHeader(new ClassicsHeader(this));
//设置 Footer 为 经典样式
refreshLayout.setRefreshFooter(new ClassicsFooter(this)); refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
//在这里执行上拉刷新时的具体操作(网络请求、更新UI等) //模拟网络请求到的数据
ArrayList<ItemBean> newList = new ArrayList<ItemBean>();
for (int i=0;i<20;i++){
newList.add(new ItemBean(
R.mipmap.ic_launcher,
"newTitle"+i,
new Date().toString()+""
));
}
myAdapter.refresh(newList);
refreshlayout.finishRefresh(2000/*,false*/);
//不传时间则立即停止刷新 传入false表示刷新失败
}
});
refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
@Override
public void onLoadmore(RefreshLayout refreshlayout) { //模拟网络请求到的数据
ArrayList<ItemBean> newList = new ArrayList<ItemBean>();
for (int i=0;i<20;i++){
newList.add(new ItemBean(
R.mipmap.ic_launcher,
"addTitle"+i,
new Date().toString()+""
));
}
myAdapter.add(newList);
//在这里执行下拉加载时的具体操作(网络请求、更新UI等)
refreshlayout.finishLoadmore(2000/*,false*/);//不传时间则立即停止刷新 传入false表示加载失败
}
});
} }
看下效果。

Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView的更多相关文章
- SwipeRefreshLayout实现下拉刷新上滑加载
1. 效果图 2.RefreshLayout.java package myapplication.com.myapplication; import android.content.Context; ...
- Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)
转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...
- jQuery WeUI 组件下拉刷新和滚动加载的实现
最近在做手机版使用到了下拉刷新和滚动加载,记录一下实现过程: 一.引入文件 ? 1 2 3 4 <link rel="stylesheet" href="Conte ...
- 第三方 XListview 上拉加载、下拉刷新、分页加载和Gson解析
注意:此Demo用的是第三方的Xlistview.jar,需要复制me文件夹到项目中,两个XML布局文件和一张图片 把下面的复制到String中 <string name="xlist ...
- Android下拉刷新上拉载入控件,对全部View通用!
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38868463 前面写过一篇关于下拉刷新控件的博客下拉刷新控件终结者:Pull ...
- mui 动态加载数据出现的问题处理 (silder轮播组件 indexedList索引列表 下拉刷新不能继续加载数据)
mui-slider 问题:动态给mui的图片轮播添加图片,轮播不滚动. 解决:最后把滚动轮播图片的mui(".mui-slider").slider({interval: 300 ...
- Android 下拉刷新上拉载入效果功能
应用场景: 在App开发中,对于信息的获取与演示.不可能所有将其获取与演示,为了在用户使用中,给予用户以友好.方便的用户体验,以滑动.下拉的效果动态载入数据的要求就会出现. 为此.该效果功能就须要应用 ...
- 微信小程序下拉刷新 并重新加载数据
1.在json页面配置: { "enablePullDownRefresh": true } 2.调用刷新函数 onPullDownRefresh: function() { wx ...
- Android 下拉刷新上拉加载PullToRefresh
https://github.com/823546371/PullToRefresh http://www.jianshu.com/p/0f5d0991efdc
随机推荐
- 专注做好一件事(转) focus---这个世界上最成功的人,他们在某一领域获得成功之后,可通过经营杠杆进入任何他们想要涉足的领域。而这都得依赖于他们曾极致的专注在做好一件事情上。
- OpenCV 学习笔记03 直线和圆检测
检测边缘和轮廓不仅重要,还经常用到,它们也是构成其他复杂操作的基础. 直线和形状检测与边缘和轮廓检测有密切的关系. 霍夫hough 变换是直线和形状检测背后的理论基础.霍夫变化是基于极坐标和向量开展的 ...
- java多线程学习--java.util.concurrent (转载)
题记:util和concurrent 包是后续重点先看的和学习的模块 原文地址:http://www.cnblogs.com/sunhan/p/3817806.html CountDownLatch, ...
- Android如何实现点击一次返回键返回桌面而不是退出应用
具体代码如下所示: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent. ...
- Java中类的设计技巧
1) 一定要将数据设计为私有: 不要破坏封装性.有时需要编写一个访问器或更改器方法,但是最好还是保持实例域的私有性.数据的表示形式可能会改变,但他们的使用方式却不会经常发生变化.当数据保持私有时,他 ...
- Android MediaPlayer和VideoView的使用
MediaPlayer MediaPlayer类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码和播放音视频.它支持三种不同的媒体来源: 本地资源 内部 ...
- 基础002_V7-CLB
一.综述 参考ug474.pdf: 7系列中,一个CLB包含两个slice: 每个CLB的资源: CLB可配置的主要功能: 二.主要功能 LUT是基本单元,例如选择器assign muxout = ...
- Android:UI 沉浸式体验,适合第一屏的引导图片、预览图片。
链接:http://www.cnblogs.com/liushilin/p/5799381.html
- 转【Python】同时向控制台和文件输出日志logging
#-*- coding:utf-8 -*-import logging # 配置日志信息logging.basicConfig(level=logging.DEBUG, format='%(ascti ...
- ISO-OSI的七层协议经典架构
OSI(Open System interconnection)开放系统互连参考模型 ISO(International Standards Organization)国际标准化组织 第一层:物理层 ...