在弄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的更多相关文章

  1. SwipeRefreshLayout实现下拉刷新上滑加载

    1. 效果图 2.RefreshLayout.java package myapplication.com.myapplication; import android.content.Context; ...

  2. Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)

    转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...

  3. jQuery WeUI 组件下拉刷新和滚动加载的实现

    最近在做手机版使用到了下拉刷新和滚动加载,记录一下实现过程: 一.引入文件 ? 1 2 3 4 <link rel="stylesheet" href="Conte ...

  4. 第三方 XListview 上拉加载、下拉刷新、分页加载和Gson解析

    注意:此Demo用的是第三方的Xlistview.jar,需要复制me文件夹到项目中,两个XML布局文件和一张图片 把下面的复制到String中 <string name="xlist ...

  5. Android下拉刷新上拉载入控件,对全部View通用!

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38868463 前面写过一篇关于下拉刷新控件的博客下拉刷新控件终结者:Pull ...

  6. mui 动态加载数据出现的问题处理 (silder轮播组件 indexedList索引列表 下拉刷新不能继续加载数据)

    mui-slider 问题:动态给mui的图片轮播添加图片,轮播不滚动. 解决:最后把滚动轮播图片的mui(".mui-slider").slider({interval: 300 ...

  7. Android 下拉刷新上拉载入效果功能

    应用场景: 在App开发中,对于信息的获取与演示.不可能所有将其获取与演示,为了在用户使用中,给予用户以友好.方便的用户体验,以滑动.下拉的效果动态载入数据的要求就会出现. 为此.该效果功能就须要应用 ...

  8. 微信小程序下拉刷新 并重新加载数据

    1.在json页面配置: { "enablePullDownRefresh": true } 2.调用刷新函数 onPullDownRefresh: function() { wx ...

  9. Android 下拉刷新上拉加载PullToRefresh

    https://github.com/823546371/PullToRefresh http://www.jianshu.com/p/0f5d0991efdc

随机推荐

  1. Swift 基本运算符

    前言 Swift 语言支持大部分标准 C 语言的运算符,并且改进了许多特性来使我们的代码更加规范,其中主要包含算数运算符.区间运算符.逻辑运算符.关系运算符.赋值运算符.自增自减运算符.溢出运算符等. ...

  2. 【C语言】练习3-5

     题目来源:<The C programming language>中的习题P51  练习2-1:  编写函数itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形 ...

  3. .net core 实现默认图片

    web 上 如果图片不存在 一般是打xx  这时候 一般都是会设置默认的图片 代替   现在用中间件的方式实现统一设置   一次设置 全部作用 .net core 实现默认图片 Startup 文件 ...

  4. State Threads 回调终结者

    上回写了篇<一个“蝇量级”C语言协程库>,推荐了一下Protothreads,通过coroutine模拟了用户级别的multi-threading模型,虽然本身足够“轻”,杜绝了系统开销, ...

  5. LIGHT OJ 1199 - Partitioning Game

    传送门 1199 - Partitioning Game    PDF (English) problem=1199" style="color:rgb(79,107,114)&q ...

  6. stm8 I/O口模式配置

    复位后的默认配置 :复位之后,所有的引脚都是悬浮输入模式. However, a few pins may have a different behavior. Refer to the datash ...

  7. Android编译系统环境初始化过程分析

    Android源代码在编译之前,要先对编译环境进行初始化,其中最主要就是指定编译的类型和目标设备的型号.Android的编译类型主要有eng.userdebug和user三种,而支持的目标设备型号则是 ...

  8. 孰优孰劣?Dubbo VS Spring Cloud性能测试大对决!

    最近我们试图从Dubbo迁移到Spring Cloud.为此对二者分别进行了性能测试.为了得出数据量不同的情况下的二者的性能表现,我们分别准备了一个25个属性pojo对象和一个50个属性的pojo对象 ...

  9. CodeSign error: code signing is required for product type Application in SDK iOS XXX的解决办法

    转自:http://www.tuicool.com/articles/jYRNbm 在真机测试的时候往往会突然出现这样一个错误,code signing is required for product ...

  10. RSA公钥加密,私钥解密的程序示例

    using System;using System.Collections.Generic;using System.Linq;using System.Security.Cryptography;u ...