这个博客我做的是使用XRecyclerView来做上拉刷新还有涉及到使用MVP的地方所以我就省略一些 只展示适配器和主页面逻辑操作的地方
依赖
implementation 'com.squareup.okhttp3:okhttp-ws:3.4.2'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.android.support:design:27.1.1'
implementation 'com.jcodecraeer:xrecyclerview:1.5.9'
权限
<uses-permission android:name="android.permission.INTERNET"/>
activity_main.xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/xrecy"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
MyAdapter适配器
package lianxi.bwie.com.xrecyclerview;
import android.content.Context;
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;
import java.util.List;
import static android.support.v7.widget.RecyclerView.*;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.RecyclerHolder>{
private Context context;
private List<UserBean.DataBean> list = new ArrayList<>();
public MyAdapter(Context context) {
this.context = context;
}
public void setList(List<UserBean.DataBean> list){
this.list = list;
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public MyAdapter.RecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_one, parent, false);
RecyclerHolder holder = new RecyclerHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyAdapter.RecyclerHolder holder, int position) {
holder.one_text.setText(list.get(position).getDate());
holder.one_title.setText(list.get(position).getTitle());
}
public class RecyclerHolder extends ViewHolder {
TextView one_text;
TextView one_title;
public RecyclerHolder(View itemView) {
super(itemView);
one_text = itemView.findViewById(R.id.one_text);
one_title = itemView.findViewById(R.id.one_title);
}
}
}
MainActivity类
public class MainActivity extends BaseActivity implements XRecyclerView.LoadingListener ,IView{
private XRecyclerView mXrecy;
private String mUrls = "http://www.xieast.com/api/news/news.php?page=1";
private int mIndex = 1;
private List<UserBean.DataBean> mListAll = new ArrayList<>();
private MyAdapter mAdapter;
private IProgressImpl mIProgress;
//加载布局
@Override
protected int getLayout() {
return R.layout.activity_main;
}
//初始化控件
@Override
protected void initViews() {
mXrecy = findViewById(R.id.xrecy);
}
//逻辑处理
@Override
protected void pregress() {
mAdapter = new MyAdapter(MainActivity.this);
mIProgress = new IProgressImpl(this);
mIProgress.start(mUrls,mIndex);
LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this);
manager.setOrientation(LinearLayout.VERTICAL);
mXrecy.setLayoutManager(manager);
mXrecy.setAdapter(mAdapter);
//上拉下拉监听
mXrecy.setLoadingListener(this);
mXrecy.setLoadingMoreProgressStyle(ProgressStyle.Pacman);
// 如果设置上这个,下拉刷新的时候会显示上次刷新的时间
mXrecy.getDefaultRefreshHeaderView() // get default refresh header view
.setRefreshTimeVisible(true); // make refresh time visible,false means hiding
}
//上拉
@Override
public void onRefresh() {
mIndex =1;
mListAll.clear();
mIProgress.start(mUrls,1);
// 为了看效果,加了一个等待效果,正式的时候直接写mRecyclerView.refreshComplete();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mXrecy.refreshComplete();
}
}, 2000);
}
//下拉
@Override
public void onLoadMore() {
mIndex++;
mIProgress.start(mUrls,mIndex);
// 为了看效果,加了一个等待效果,正式的时候直接写mRecyclerView.refreshComplete();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mXrecy.refreshComplete();
}
}, 2000);
}
//成功返回的数据
@Override
public void successData(Object successdata) {
UserBean bean = (UserBean) successdata;
List<UserBean.DataBean> list = bean.getData();
Log.e("数据",list+"");
mListAll.addAll(list);
mAdapter.setList(mListAll);
}
//失败返回的数据
@Override
public void errorData(Object errordata) {
}
}
BaseActivity类
package lianxi.bwie.com.xrecyclerview;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
protected abstract int getLayout();
protected abstract void initViews();
protected abstract void pregress();
void init() {
if(getLayout()!=0){
setContentView(getLayout());
initViews();
pregress();
}
}
}
这里不是很详细 就放到GitHup上具体代码可以参考一下
https://github.com/qq1341738311/XRecyclerView