XRecyclerView实现下拉刷新、滚动到底部加载更多等功能

作者:Tryking 时间:2023-11-07 06:40:55 

介绍:

一个实现了下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView。使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊的adater。 加载效果内置了AVLoadingIndicatorView上的所有效果,可以根据需要指定。

项目地址:https://github.com/jianghejie/XRecyclerView

效果:

XRecyclerView实现下拉刷新、滚动到底部加载更多等功能

使用:

xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/recyclerview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

</RelativeLayout>

2.MainActivity


package com.example.xrecyclerview;

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.jcodecraeer.xrecyclerview.ProgressStyle;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
private XRecyclerView mRecyclerView;
private MyAdapter mAdapter;
private ArrayList<String> listData;
private int refreshTime = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (XRecyclerView)this.findViewById(R.id.recyclerview);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(layoutManager);

mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);
mRecyclerView.setLaodingMoreProgressStyle(ProgressStyle.Pacman);
mRecyclerView.setArrowImageView(R.drawable.iconfont_downgrey);

View header = LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);
mRecyclerView.addHeaderView(header);

mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
refreshTime ++;
new Handler().postDelayed(new Runnable(){
public void run() {
listData.clear();
for(int i = 0; i < 15 ;i++){
listData.add("item" + i + "after " + refreshTime + " times of refresh");
}
mAdapter.notifyDataSetChanged();
mRecyclerView.refreshComplete();
}
}, 3000);  //refresh data here
}

@Override
public void onLoadMore() {
new Handler().postDelayed(new Runnable(){
public void run() {
for(int i = 0; i < 15 ;i++){
listData.add("item" + (i + listData.size()) );
}
mAdapter.notifyDataSetChanged();
mRecyclerView.loadMoreComplete();
}
}, 3000);

}

});

listData = new ArrayList<String>();
mAdapter = new MyAdapter(listData);
for(int i = 0; i < 15 ;i++){
listData.add("item" + i);
}
mRecyclerView.setAdapter(mAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement

if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

}

3. adapter


package com.example.xrecyclerview;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;

/**
* Created by jianghejie on 15/11/26.
*/
public 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.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();
}
//自定义的ViewHolder,持有每个Item的的所有界面元素
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(View view){
super(view);

mTextView = (TextView) view.findViewById(R.id.text);
}

}
标签:XRecyclerView,下拉刷新,滚动加载
0
投稿

猜你喜欢

  • Java后端Tomcat实现WebSocket实例教程

    2023-08-22 17:31:09
  • 微信开发准备第二步 springmvc mybatis项目结构搭建

    2021-07-16 22:18:37
  • java JVM原理与常识知识点

    2022-06-24 16:26:50
  • C#使用Task实现异步方法

    2022-09-02 20:26:53
  • Java实现把文件及文件夹压缩成zip

    2022-03-30 05:28:45
  • Mybatis Plus 中的LambdaQueryWrapper示例详解

    2023-03-26 04:52:06
  • C#实现在前端网页弹出警告对话框(alert)的方法

    2022-02-17 11:05:12
  • 使用EasyPoi轻松导入导出Excel文档的方法示例

    2023-12-26 11:47:56
  • Mybatis无法获取带有下划线前缀的字段的值问题

    2023-07-20 10:06:33
  • Java ClassLoader虚拟类实现代码热替换的示例代码

    2022-06-25 03:08:52
  • 利用@Value注解为bean的属性赋值方法总结

    2023-10-15 19:54:06
  • Android编程下拉菜单spinner用法小结(附2则示例)

    2022-11-02 20:25:45
  • 通过Html网页调用本地安卓(android)app程序代码

    2022-05-10 10:14:34
  • Java编程中的一些常见问题汇总

    2022-01-08 18:05:46
  • Java使用Hutool实现AES、DES加密解密的方法

    2021-06-03 16:49:57
  • C++内存对齐的实现

    2023-11-22 00:42:20
  • Spring Cloud Config对特殊字符加密处理的方法详解

    2021-11-22 15:16:48
  • 基于Jenkins搭建.NET Core持续集成环境过程图解

    2021-10-25 03:44:33
  • C语言植物大战数据结构二叉树递归

    2022-02-13 14:12:06
  • C#弹出对话框确定或者取消执行相应操作的实例代码

    2021-11-19 13:26:29
  • asp之家 软件编程 m.aspxhome.com