首先,导入依赖:compile 'com.jcodecraeer:xrecyclerview:1.3.2'
然后在MainActivity里进行主要的代码
(我的刷新和加载是根据page(页码)来进行的)
public class MainActivity extends AppCompatActivity { private XRecyclerView rlv; private int page=1; private String url="http://www.yulin520.com/a2a/impressApi/news/mergeList?sign=C7548DE604BCB8A17592EFB9006F9265&pageSize=20&gender=2&ts=1871746850"; private List<Bean.DataBean> list_data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(page); } /** * 初始化控件 */ private void initView() { //获取控件 rlv = (XRecyclerView) findViewById(R.id.rlv_item); //添加布局管理器 rlv.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); //允许上拉和下拉 rlv.setLoadingMoreEnabled(true);//加载更多 rlv.setPullRefreshEnabled(true);//下拉刷新 rlv.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { page=1; initData(page); rlv.refreshComplete();//停止刷新 System.out.println("===page刷=="+page); } @Override public void onLoadMore() { page++; initData(page); rlv.loadMoreComplete();//设置停止加载 System.out.println("===page加=="+page); } }); } /** * 请求网络数据 */ private void initData(int page) { Map<String,String> map=new HashMap(); map.put("page",page+""); System.out.println("===page=="+page); OkHttp3Utils.doPost(url, map, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { final String result = response.body().string(); System.out.println("===数据请求成功=="+result); //解析数据 Gson gson=new Gson(); Bean bean = gson.fromJson(result, Bean.class); list_data = bean.getData(); runOnUiThread(new Runnable() { @Override public void run() { if(list_data!=null) { //设置适配器 MyAdapter ma=new MyAdapter(MainActivity.this,list_data); rlv.setAdapter(ma); } } }); } }); } }
XRecyclerView和RecyclerView实现的效果是一样的,适配器的写法也是一样的,接下来看一下适配器的完整代码(子条目展示数据的布局就不多写了,可根据自己的需求,进行书写)
//Adapter<MyAdapter.ViewHolder>这块是自己定义的ViewHolder public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ Context context; List<Bean.DataBean> list_data=new ArrayList<>(); public MyAdapter(Context context, List<Bean.DataBean> list_data) { this.context = context; this.list_data = list_data; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(context).inflate(R.layout.item,parent,false); ViewHolder holder=new ViewHolder(view); return holder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { Glide.with(context).load(list_data.get(position).getImg()).into(holder.iv_img); holder.tv_age.setText(list_data.get(position).getUserAge()+""); holder.tv_gongzuo.setText(list_data.get(position).getOccupation()); holder.tv_jieshao.setText(list_data.get(position).getIntroduction()); holder.tv_name.setText(list_data.get(position).getTitle()); } @Override public int getItemCount() { return list_data.size(); } /** * 自定义ViewHolder继承RecyclerView里的ViewHolder */ public class ViewHolder extends RecyclerView.ViewHolder { private final TextView tv_jieshao; private final TextView tv_gongzuo; private final TextView tv_age; private final ImageView iv_img; private final TextView tv_name; public ViewHolder(View itemView) { super(itemView); iv_img = itemView.findViewById(R.id.iv_img); tv_age = itemView.findViewById(R.id.tv_age); tv_gongzuo = itemView.findViewById(R.id.tv_gongzuo); tv_jieshao = itemView.findViewById(R.id.tv_jieshao); tv_name = itemView.findViewById(R.id.tv_name); } } }
接下来看一下activity_main.xml布局
<RelativeLayout 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:layout_width="match_parent" android:layout_height="match_parent"> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/rlv_item" android:layout_width="match_parent" android:layout_height="wrap_content"> </com.jcodecraeer.xrecyclerview.XRecyclerView> </RelativeLayout>
以上便可实现简单的上拉加载和下拉刷新