效果图:

首先要添加依赖:

//xrecyclerview
implementation 'com.jcodecraeer:xrecyclerview:1.3.2'
//Gson
implementation 'com.google.code.gson:gson:2.2.4'
//okhttputils
implementation 'com.zhy:okhttputils:2.0.0' 权限:
<uses-permission android:name="android.permission.INTERNET" />

布局:
    <com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/RV_all"
android:layout_width="match_parent"
android:layout_height="match_parent"> </com.jcodecraeer.xrecyclerview.XRecyclerView>

All_Fragment:
public class All_Fragment extends Fragment {

    private XRecyclerView RV_all;//XRecyclerView
private int i=0;//页数
private Adapter_All adapter_all;//适配器
private ArrayList<Bean_All.MessageBean.AnchorsBean> data;//把获取的数据放到集合里
private int con=0;//判断con是否等于0等于0就执行适配器和瀑布流con不等于0就刷新界面 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_all_, container, false);
initView(inflate);
data = new ArrayList<>();
//okhttp解析
okhttp(i);
return inflate;
}
private void okhttp(final int i) {
OkHttpUtils.get()
.url(Cans.HOME_PAGE + "" + i + "&index=0")//地址
.build().execute(new StringCallback() {
@Override
public void onError(Request request, Exception e) {
Log.e("Song-All-onError", request + "");
}
@Override
public void onResponse(String response) {
Log.e("Song-All-onResponse", response + "");
//解析所有数据
all(response);
}
});
}
//解析所有数据
private void all(String response) {
//Gson解析
Gson gson = new Gson();
//获取Bean类的数据
Bean_All bean_all = gson.fromJson(response, Bean_All.class);
final List<Bean_All.MessageBean.AnchorsBean> anchors = bean_all.getMessage().getAnchors();
//把Bean类获取的数据放到集合中
data.addAll(anchors);
//判断con是否等于0等于0就执行适配器和瀑布流con不等于0就刷新界面
if (con == 0){
//瀑布流
RV_all.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
//适配器
adapter_all = new Adapter_All(data, getActivity());
//添加适配器
RV_all.setAdapter(adapter_all);
}else {
adapter_all.notifyDataSetChanged();//刷新界面
} //XRecyclerView的点击事件
adapter_all.setmOnItemListener(new Adapter_RecyclerView.OnItemListener() {
@Override
public void onItemClick(int position) {
//Intent跳转
Intent intent = new Intent(getActivity(), All_Activity.class);
intent.putExtra("roomid", data.get(position).getRoomid());
startActivity(intent);
}
}); /**
*设定下拉刷新和上拉加载监听
*/
RV_all.setLoadingListener(new XRecyclerView.LoadingListener() {
//上拉加载监听
@Override
public void onLoadMore() {
i++;//上拉加载添加数据
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
con=1;//con不等于0就执行上啦加载
okhttp(i);//okhttp解析数据
RV_all.loadMoreComplete(); //加载数据完成(取消加载动画)
}
},2000);
}
//下拉刷新监听
@Override
public void onRefresh() {
//清除集合
data.clear();
okhttp(0);//初始化数据
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
adapter_all.notifyDataSetChanged();//刷新界面
RV_all.refreshComplete(); //刷新数据完成(取消刷新动画)
}
},2000);
}
}); }
private void initView(View inflate) {
RV_all = (XRecyclerView) inflate.findViewById(R.id.RV_all);
}
}

适配器:


public class Adapter_All extends XRecyclerView.Adapter<Adapter_All.ViewHolder>{
private List<Bean_All.MessageBean.AnchorsBean> list;
private Context context; public Adapter_All(List<Bean_All.MessageBean.AnchorsBean> list, Context context) {
this.list = list;
this.context = context;
} @Override
public Adapter_All.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.layout_all, parent, false);
ViewHolder viewHolder = new ViewHolder(inflate);
return viewHolder;
} @Override
public void onBindViewHolder(Adapter_All.ViewHolder holder, int position) {
Glide.with(context).load(list.get(position).getPic74()).into(holder.img_all);
holder.tv_name.setText(list.get(position).getName());
holder.tv_online.setText(""+list.get(position).getFocus()+"人");
} @Override
public int getItemCount() {
return list == null ? 0 : list.size();
} public class ViewHolder extends RecyclerView.ViewHolder { private final ImageView img_all;
private final TextView tv_name;
private final TextView tv_online; public ViewHolder(View itemView) {
super(itemView);
img_all = itemView.findViewById(R.id.img_all);
tv_name = itemView.findViewById(R.id.tv_name);
tv_online = itemView.findViewById(R.id.tv_online);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mOnItemListener!=null){
mOnItemListener.onItemClick(getPosition());
}
}
});
}
}
public interface OnItemListener{
void onItemClick(int position);
}
public Adapter_RecyclerView.OnItemListener mOnItemListener;
public void setmOnItemListener(Adapter_RecyclerView.OnItemListener mOnItemListener){
this.mOnItemListener = mOnItemListener;
}
}

 
 

XRecyclerView上拉刷新下拉加载的更多相关文章

  1. jQuery模拟原生态App上拉刷新下拉加载

    jQuery模拟原生态App上拉刷新下拉加载效果代码,鼠标上拉时会显示loading字样,并且会模拟加载一条静态数据,支持触屏设备使用. <!doctype html> <html ...

  2. Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载

    随着 Google 推出了全新的设计语言 Material Design,还迎来了新的 Android 支持库 v7,其中就包含了 Material Design 设计语言中关于 Card 卡片概念的 ...

  3. Flutter学习笔记(25)--ListView实现上拉刷新下拉加载

    如需转载,请注明出处:Flutter学习笔记(25)--ListView实现上拉刷新下拉加载 前面我们有写过ListView的使用:Flutter学习笔记(12)--列表组件,当列表的数据非常多时,需 ...

  4. 微信小程序 上拉刷新/下拉加载

    小程序项目中上拉刷新下拉加载是比较常见的需求,官方文档也提供了相当友好的API,但是因为API隐藏的比较深,文档描述也比较模糊所以也折腾了一番(官方文档),在此记录一下使用方式 onPullDownR ...

  5. ListView上拉刷新和分页加载完整的Dome

    很多人工作的过程中都会碰到ListView下拉刷新和分页加载,然后大多数公司都已经把框架写好了,大家直接用就可以了,有些人一直对这个事情处于迷茫状态,为了让大家对上拉刷新和分页加载有一个比较全面的认识 ...

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

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

  7. 实现app上对csdn的文章列表上拉刷新下拉加载以及加入缓存文章列表的功能 (制作csdn app 四)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23698511 今天继续对我们的csdn客户端未完成的功能进行实现,本篇博客接着客 ...

  8. iOS:延迟加载和上拉刷新/下拉加载的实现

    lazy懒加载(延迟加载)UITableView 举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要 ...

  9. MUI - 上拉刷新/下拉加载

    新闻信息列表必备的功能,支持Table,Ul等列表. 以下是DIV版本,在安卓端或者ios端必须使用双webview模式,传送门:http://dev.dcloud.net.cn/mui/pulldo ...

随机推荐

  1. [译]ASP.NET Core中使用MediatR实现命令和中介者模式

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9866068.html 在本文中,我将解释命令模式,以及如何利用基于命令模式的第三方库来实现它们,以及如何 ...

  2. sql server 备份与恢复系列五 完整模式下的备份与还原

    一.概述 前面介绍了简单恢复模式和大容量恢复模式,这篇继续写完整恢复模式下的备份与还原.在完整恢复模式里最大的优点是只要能成功备份尾日志,就可以还原到日志备份内包含的任何时点("时点恢复&q ...

  3. Android--使用剪切板在Activity中传值

    在Activity之间传递数据还可以利用一些技巧,不管windows还是Linux操作系统,都会支持一种叫剪切板的技术,也就是某一个程序将一些数据复制到剪切板上,然后其他的任何程序都可以从剪切板中获取 ...

  4. 11张PPT介绍Paxos协议

    之前翻译了<The Part-Time Parliament>一文,论文非常经常,强烈推荐读一读原文.翻译完论文后,希望自己能用简单的描述来整理自己的理解,所以花了一些时间通过PPT的形式 ...

  5. border-image属性把边框的背景设置为图片

    一.浏览器对它的支持Firefox3.5-Firefox15     需要加-moz-前缀Firefox15以上              同样支持-moz-前缀的css代码,但是必须在css代码中加 ...

  6. Web Service 部分内容简述(2)

    1. CORBA是什么?用途是什么?  CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object M ...

  7. 【原创】空中鼠标一DMP欧拉角

    正在搞六轴传感器,今天移植了MPU6050的MothionDriver的DMP固件到STM32上了,能够稳定地输出欧拉角(也就是俯仰角.航向角.横滚角)和XYZ三轴加速度值,在电脑的上位机模拟了装置的 ...

  8. Ubuntu 下 Galera cluster for MySQL 集群安装

    mysql galera cluster官网:http://galeracluster.com/documentation-webpages/ 相关安装教程:(不一定管用) http://blog.c ...

  9. 痞子衡嵌入式:ARM Cortex-M内核那些事(1)- 内核架构编年史

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM内核架构历史. 众所周知,ARM公司是一家微处理器行业的知名企业,ARM公司本身并不靠自有的设计来制造或出售CPU,而是将处理器架 ...

  10. 痞子衡嵌入式:开源软件协议(MIT/BSD/Apache/LGPL/MPL/GPL)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是关于开源软件协议基本知识. 牛顿曾说过:"如果我比别人看得更远,那是因为我站在巨人的肩上".在软件开发中如果说也存在巨 ...