Irecycleview 的初次使用简单介绍(irecycleview 下拉刷新上拉加载)
导包 还得加一个maven地址自己也看一下作者git把有详细解释(自己也要导入recycleview的包)
我的例子下载地址 https://www.lanzous.com/i32yzaj
implementation 'com.github.Aspsine:IRecyclerView:0.0.7'
其实简单用法很简单 导包后 activity 和fragment 都可以 implements OnRefreshListener,OnLoadMoreListener 实现其中的方法loadmore refrash就行是我想复杂了【但是对于上拉刷新要setRefreshEnabled(true);和设置刷新的头部view 我以为作者在包里面封装了,后来发现并没封装 这个头部也是要自己写的吧 尾部也是......不知到是不是我理解错了 作者例子里也不是很详细 没有默认的封装好的 】
我的简单例子图片


我掉的坑就是设置头部和尾部view,以为不设置会有默认的其实没有 ,第二个 copy作者的xml文件和那个头部和尾部view类 xml文件出错
layout_irecyclerview_load_more_footer.xml
<com.stdu.LoadMoreFooterView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48dp"/> com.stdu.LoadMoreFooterView 这个要是你的类路径 直接copy作者的弄了一会
其他的就很简单
上Mainactivity代码
public class MainActivity extends AppCompatActivity implements  OnRefreshListener,OnLoadMoreListener{
    List<Teacher> list;
    IRecyclerView view;
    TeacherAdapter1 adapter;
    LoadMoreFooterView loadMoreFooterView;
    int num=;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initList();
        view = findViewById(R.id.view);
        loadMoreFooterView= (LoadMoreFooterView) view.getLoadMoreFooterView();
        view.setLayoutManager(new LinearLayoutManager(this));
        initRefreshView();//初始化刷新
        initLoadMoreView();//初始化加载更多
        adapter = new TeacherAdapter1(R.layout.item,list);//TeacherAdapter(this,list);
        adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                Toast.makeText(MainActivity.this,"哈哈"+position,Toast.LENGTH_SHORT).show();
            }
        });
        view.setIAdapter(adapter);
//注意setIAdapter 中间有个I
    }
    private void initRefreshView() {
        view.setRefreshEnabled(true);
       // System.out.println("initRefreshView------------------");
        //这两个类是直接从作者哪里八下来的 我发现作者没提供默认样式..........是我没找到错了码?
        ClassicRefreshHeaderView classicRefreshHeaderView = new ClassicRefreshHeaderView(this);
        classicRefreshHeaderView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ));
        view.setRefreshHeaderView(classicRefreshHeaderView);
        view.setOnRefreshListener(this);
    }
    private void initLoadMoreView()
    {
        view.setOnLoadMoreListener(this);
        view.setLoadMoreEnabled(true);
        view.setOnLoadMoreListener(this);
    }
    @Override
    public void onRefresh() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                view.setRefreshing(false);
            }
        },);
    }
//初始化载入的list
    private void initList() {
        list = new ArrayList<>();
        for (int i = ; i < ; i++) {
            list.add(new Teacher(R.mipmap.ic_launcher,"teacher "+i));
        }
    }
    @Override
    public void onLoadMore() {
        num++; //模拟假数据如果num<3则请求到了数据
        loadMoreFooterView.setStatus(LoadMoreFooterView.Status.LOADING);//向上滑动就显示loading 界面
        if(num<=) {
            new Handler().postDelayed(new Runnable() {
                @Override//延迟两秒执行
                public void run() {
                    //模拟网上得到数据封装成list
                    for (int i = ; i < ; i++) {
                        list.add(new Teacher(R.mipmap.ic_launcher, "第二次加载 " + i));
                    }
                    //System.out.println("载入其他数据");
                    loadMoreFooterView.setStatus(LoadMoreFooterView.Status.GONE);//得到数据loading界面消失
                }
            },);
        }else
            {
            loadMoreFooterView.setStatus(LoadMoreFooterView.Status.THE_END);//数据加载完
        }
    }
    }
TeacherAdapter1 代码 (这个老师的例子是看的网上一个例子睡了一晚百度了一下没找着,这个TeacherAdapter1 是我自己写的哈不存在抄袭)
public class TeacherAdapter1 extends BaseQuickAdapter<Teacher, BaseViewHolder> {
    List<Teacher> list;
    Context context;
    public TeacherAdapter1(int layoutResId, @Nullable List<Teacher> data) {
        super(layoutResId, data);
    }
    @Override
    protected void convert(BaseViewHolder helper, Teacher item) {
     helper.addOnClickListener(R.id.image);
     helper.setText(R.id.text,item.getName());
     helper.setImageResource(R.id.image,item.getId());
    }
}
ClassicRefreshHeaderView 作者的直接copy
package com.stdu; import android.content.Context;
import android.util.AttributeSet;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView; import com.aspsine.irecyclerview.RefreshTrigger;
public class ClassicRefreshHeaderView extends RelativeLayout implements RefreshTrigger {
private ImageView ivArrow; private ImageView ivSuccess; private TextView tvRefresh; private ProgressBar progressBar; private Animation rotateUp; private Animation rotateDown; private boolean rotated = false; private int mHeight; public ClassicRefreshHeaderView(Context context) {
this(context, null);
} public ClassicRefreshHeaderView(Context context, AttributeSet attrs) {
this(context, attrs, );
} public ClassicRefreshHeaderView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr); inflate(context, R.layout.layout_irecyclerview_classic_refresh_header_view, this); tvRefresh = (TextView) findViewById(R.id.tvRefresh); ivArrow = (ImageView) findViewById(R.id.ivArrow); ivSuccess = (ImageView) findViewById(R.id.ivSuccess); progressBar = (ProgressBar) findViewById(R.id.progressbar); rotateUp = AnimationUtils.loadAnimation(context, R.anim.rotate_up); rotateDown = AnimationUtils.loadAnimation(context, R.anim.rotate_down);
} @Override
public void onStart(boolean automatic, int headerHeight, int finalHeight) {
this.mHeight = headerHeight;
progressBar.setIndeterminate(false);
} @Override
public void onMove(boolean isComplete, boolean automatic, int moved) {
if (!isComplete) {
ivArrow.setVisibility(VISIBLE);
progressBar.setVisibility(GONE);
ivSuccess.setVisibility(GONE);
if (moved <= mHeight) {
if (rotated) {
ivArrow.clearAnimation();
ivArrow.startAnimation(rotateDown);
rotated = false;
} tvRefresh.setText("下拉刷新");
} else {
tvRefresh.setText("释放刷新");
if (!rotated) {
ivArrow.clearAnimation();
ivArrow.startAnimation(rotateUp);
rotated = true;
}
}
}
} @Override
public void onRefresh() {
ivSuccess.setVisibility(GONE);
ivArrow.clearAnimation();
ivArrow.setVisibility(GONE);
progressBar.setVisibility(VISIBLE);
tvRefresh.setText("刷新中..");
} @Override
public void onRelease() { } @Override
public void onComplete() {
rotated = false;
ivSuccess.setVisibility(VISIBLE);
ivArrow.clearAnimation();
ivArrow.setVisibility(GONE);
progressBar.setVisibility(GONE);
tvRefresh.setText("刷新成功");
} @Override
public void onReset() {
rotated = false;
ivSuccess.setVisibility(GONE);
ivArrow.clearAnimation();
ivArrow.setVisibility(GONE);
progressBar.setVisibility(GONE);
}
}
LoadMoreFooterView 作者的直接copy
package com.stdu; import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout; public class LoadMoreFooterView extends FrameLayout { private Status mStatus; private View mLoadingView; private View mErrorView; private View mTheEndView; private OnRetryListener mOnRetryListener; public LoadMoreFooterView(Context context) {
this(context, null);
} public LoadMoreFooterView(Context context, AttributeSet attrs) {
this(context, attrs, );
} public LoadMoreFooterView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
LayoutInflater.from(context).inflate(R.layout.layout_irecyclerview_load_more_footer_view, this, true); mLoadingView = findViewById(R.id.loadingView);
mErrorView = findViewById(R.id.errorView);
mTheEndView = findViewById(R.id.theEndView); mErrorView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mOnRetryListener != null) {
mOnRetryListener.onRetry(LoadMoreFooterView.this);
}
}
}); setStatus(Status.GONE);
} public void setOnRetryListener(OnRetryListener listener) {
this.mOnRetryListener = listener;
} public Status getStatus() {
return mStatus;
} public void setStatus(Status status) {
this.mStatus = status;
change();
} public boolean canLoadMore() {
return mStatus == Status.GONE || mStatus == Status.ERROR;
} private void change() {
switch (mStatus) {
case GONE:
mLoadingView.setVisibility(GONE);
mErrorView.setVisibility(GONE);
mTheEndView.setVisibility(GONE);
break; case LOADING:
mLoadingView.setVisibility(VISIBLE);
mErrorView.setVisibility(GONE);
mTheEndView.setVisibility(GONE);
break; case ERROR:
mLoadingView.setVisibility(GONE);
mErrorView.setVisibility(VISIBLE);
mTheEndView.setVisibility(GONE);
break; case THE_END:
mLoadingView.setVisibility(GONE);
mErrorView.setVisibility(GONE);
mTheEndView.setVisibility(VISIBLE);
break;
}
} public enum Status {
GONE, LOADING, ERROR, THE_END
} public interface OnRetryListener {
void onRetry(LoadMoreFooterView view);
} }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<com.aspsine.irecyclerview.IRecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:loadMoreEnabled="true"
app:loadMoreFooterLayout="@layout/layout_irecyclerview_load_more_footer"
app:refreshEnabled="true" />
不想贴代码了大家直接下载例子 吧也是我自己学习的记录
Irecycleview 的初次使用简单介绍(irecycleview 下拉刷新上拉加载)的更多相关文章
- Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView
		
在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/de ...
 - SwipeRefreshLayout实现下拉刷新上滑加载
		
1. 效果图 2.RefreshLayout.java package myapplication.com.myapplication; import android.content.Context; ...
 - 移动端下拉刷新上拉加载-mescroll.js插件
		
最近无意间看到有这么一个上拉刷新下拉加载的插件 -- mescroll.js,个人感觉挺好用的,官网地址是:http://www.mescroll.com 然后我就看了一下文档,简单的写了一个小dem ...
 - 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
		
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
 - 基于SwiperJs的H5/移动端下拉刷新上拉加载更多
		
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
 - Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)
		
转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...
 - 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载
		
title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...
 - JS+CSS实现的下拉刷新/上拉加载插件
		
闲来无事,写了一个当下比较常见的下拉刷新/上拉加载的jquery插件,代码记录在这里,有兴趣将代码写成插件与npm包可以留言. 体验地址:http://owenliang.github.io/pull ...
 - ListView下拉刷新上拉加载更多实现
		
这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...
 - RecyclerView下拉刷新上拉加载(三)—对Adapter的封装
		
RecyclerView下拉刷新上拉加载(一) http://blog.csdn.net/baiyuliang2013/article/details/51506036 RecyclerView下拉刷 ...
 
随机推荐
- 为Docker Desktop安装kubernet-dashboard
			
在上一篇,在windows上,用最简方法(比其他的脚本法,提前拉取镜像简便太多了)安装好了docker desktop,并启用了内置的kubernetes. 这种安装方法实际上是在Hyper-v虚拟机 ...
 - js读取本地json/txt/xml存在跨越问题,可以用jsonp 读取本地json文件
			
想自己用 js写一个原生的ajax请求,访问本地文件,json/txt.但是demo,写了一个后,发现 原来是跨域了. js 写的原生ajax 请求代码如下 html代码 <div id=&qu ...
 - Java 理论与实践: 哈希
			
有效和正确定义hashCode()和equals() 每个Java对象都有 hashCode() 和 equals() 方法.许多类 Override 这些方法的缺省实施,以在对象实例之间提供更深层次 ...
 - pycharm安装报错Non-zero exit co?
			
pycharm安装第三方库时报错Non-zero exit co? 原因:版本找不到 解决思路: 1.用pip install pandas报错,尝试用python -m pip install -- ...
 - ADO.NET基础必背知识
			
DO.NET 由.Net Framework 数据提供程序和DataSet 两部分构成. .NET FrameWork 是 Connection 连接对象 Command 命令对象 DataRe ...
 - Python 类型转换指南
			
一.int型 支持转换为 int 类型的,仅有 float.str.bytes,其他类型均不支持. 1.float -> int会去掉小数点及后面的数值,仅保留整数部分. 2.str -> ...
 - 记录要做的事情,把sql字符串替换写成工具网页。
			
之前使用的是java的本地控制台进行sql占位符的替换. 现在我想换个方式,想到了两种. 第一种是使用java +jsp进行替换,前台输出. 第二种是把java代码改成js代码,反正也不用访问数据库. ...
 - CNN算法详细分析
			
test_example_CNN.m train_x = double(reshape(train_x',28,28,60000))/255; test_x = double(reshape(test ...
 - 第1节 kafka消息队列:5、javaAPI操作
			
8.kafka的API 详见代码 第一步:导入kafka的开发jar包 Kafka生产者 Kafka消费者
 - Django:使用django自带的登录模块登录后会默认登录到 /accounts/profile 下的问题
			
django settings中LOGIN_REDIRECT_URL默认重定向到/accounts/profile下,可通过配置修改