XRecyclerView上啦刷新下拉加载+RxJava+Retrofit

添加依赖

 compile 'com.jcodecraeer:xrecyclerview:1.5.8'
    compile 'com.facebook.fresco:fresco:1.3.0'
// 支持webp
    compile 'com.facebook.fresco:webpsupport:1.3.0'
// gif加载使用
    compile 'com.facebook.fresco:animated-gif:1.3.0'
// WebP(静态图+动图)加载使用
    compile 'com.facebook.fresco:animated-webp:1.3.0'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    compile "io.reactivex.rxjava2:rxjava:2.1.10"
    compile 'io.reactivex.rxjava2:rxandroid:2.0.2'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'

http包

public class HttpConfig {
    public static String base_url="https://www.zhaoapi.cn/";
}
public interface MyService {
    @FormUrlEncoded
    @POST("quarter/getJokes")
    Observable<Cros_talkBean> getCros(@FieldMap Map<String,String> map);
}
public class RetrofitUtil {
    //单例模式
    private static RetrofitUtil retrofitUtil;
    private final Retrofit retrofit;

    public static RetrofitUtil getInstance(){
        if (retrofitUtil==null){
            retrofitUtil=new RetrofitUtil();
        }
        return retrofitUtil;
    }
    //初始化Retrofit
    public RetrofitUtil(){
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
        retrofit = new Retrofit.Builder()
                .baseUrl(HttpConfig.base_url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(client)
                .build();
    }
    //通过反射创建子类
    public <T> T createRequester(Class<T> clz){
        T t = retrofit.create(clz);
        return t;
    }

    //拦截器
   class MyIntercepter implements Interceptor{

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            RequestBody body = request.body();
           if (body instanceof FormBody){
               FormBody.Builder newBuilder = new FormBody.Builder();
               for (int i = 0; i <((FormBody) body).size() ; i++) {
                   String name = ((FormBody) body).name(i);
                   String value = ((FormBody) body).value(i);
                    newBuilder.add(name,value);
               }
               newBuilder.add("source","android");
               newBuilder.add("appVersion","100");
               FormBody body1 = newBuilder.build();
               Request request1 = request.newBuilder().post(body1).build();
               Response response = chain.proceed(request1);
               return response;
           }
            return null;
        }
    }
}

view包

public interface IMainView {
    //展示段子列表
    void showCros(List<Cros_talkBean.DataBean> list);
    //错误的时候提示
    void showError(String error);
}
public class MainActivity extends AppCompatActivity implements IMainView{
    private static final String TAG = "MainActivity=======";
    private XRecyclerView xrecycler;
    private ProgressBar progress;
    private int page=1;
    private boolean flag=false;//标识是否加载历史数据
    private Map<String, String> map;
    private CrosPresenterlmpl crosPresenterlmpl;
    private List<Cros_talkBean.DataBean> maxBean;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        maxBean = new ArrayList<>();
        xrecycler = findViewById(R.id.xrecycler);
        progress = findViewById(R.id.progress);
        xrecycler.setLayoutManager(new LinearLayoutManager(this));
        crosPresenterlmpl = new CrosPresenterlmpl();

        map = new HashMap<>();

        //设置上拉下拉
        xrecycler.setPullRefreshEnabled(true);//下拉刷新
        xrecycler.setLoadingMoreEnabled(true);//上啦加载
        xrecycler.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);//样式
        xrecycler.setLoadingMoreProgressStyle(ProgressStyle.Pacman);
        //监听
        xrecycler.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {//刷新
                //刷新时每次换一页加载  不保留已经加载的数据
                flag=true;
                page++;
                getData();
                xrecycler.refreshComplete();//关闭刷新的动画
            }

            @Override
            public void onLoadMore() {//加载更多
                //加载更多的时候,保留已经加载的数据,添加新加载的数据
                flag=false;
                progress.setVisibility(View.VISIBLE);
                page++;
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        getData();
                    }
                },2000);
                xrecycler.loadMoreComplete();//关闭加载的动画
            }
        });
        getData();
    }

    @Override
    public void showCros(List<Cros_talkBean.DataBean> list) {
        Log.e("showCros",""+list);
        progress.setVisibility(View.GONE);
        if (flag){
            //为true表示加载新的数据和显示历史数据
            maxBean.addAll(list);
            MyAdapter myAdapter=new MyAdapter(this,maxBean);
            xrecycler.setAdapter(myAdapter);
        }else {//加载新的数据
            maxBean=new ArrayList<>();//刷新时就清空历史数据
            MyAdapter myAdapter=new MyAdapter(this,list);
            xrecycler.setAdapter(myAdapter);
        }
    }

    @Override
    public void showError(String error) {
        Log.d(TAG, "showError: 错误-----------"+error);
    }
    public void getData(){
        map.clear();
        map.put("page",page+"");//第一次请求可以传一个死值
        crosPresenterlmpl.CrosToView(map,this);
    }
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private Context context;
    private List<Cros_talkBean.DataBean> list;

    public MyAdapter(Context context, List<Cros_talkBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.xrecycler_layout, null);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        SimpleDraweeView image = holder.getImage();
        TextView name = holder.getName();
        SimpleDraweeView simview = holder.getSimview();
        TextView time = holder.getTime();
        TextView title = holder.getTitle();

        Cros_talkBean.DataBean dataBean = list.get(position);
        String imgUrls = (String) dataBean.getImgUrls();
        String icon = (String) dataBean.getUser().getIcon();

        title.setText(dataBean.getContent());
        time.setText(dataBean.getCreateTime()+"");
        name.setText(dataBean.getUser().getNickname()+"");
        if (null==imgUrls || "".equals(imgUrls)){

        }else {
            image.setImageURI(Uri.parse(imgUrls));
        }
        if (null==icon || "".equals(icon)){

        }else {
            simview.setImageURI(Uri.parse(icon));
        }

    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        private final SimpleDraweeView simview;
        private final TextView name;
        private final TextView time;
        private final TextView title;
        private final SimpleDraweeView image;

        public MyViewHolder(View itemView) {
            super(itemView);

            simview = itemView.findViewById(R.id.simview);
            name = itemView.findViewById(R.id.name);
            time = itemView.findViewById(R.id.time);
            title = itemView.findViewById(R.id.title);
            image = itemView.findViewById(R.id.image);
        }

        public SimpleDraweeView getSimview() {
            return simview;
        }

        public TextView getName() {
            return name;
        }

        public TextView getTime() {
            return time;
        }

        public TextView getTitle() {
            return title;
        }

        public SimpleDraweeView getImage() {
            return image;
        }
    }
}
public class MyAppliction extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

Model层

public interface IModel {
    //获取数据
    void getCros_talk(Map<String,String> map);
}
public class CrosModellmpl implements IModel {
    private static final String TAG = "CrosModellmpl------------";
    private IPresenter iPresenter;

    public CrosModellmpl(IPresenter iPresenter) {
        this.iPresenter = iPresenter;
    }

    @Override
    public void getCros_talk(Map<String, String> map) {
        RetrofitUtil.getInstance().createRequester(MyService.class)
                .getCros(map)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Cros_talkBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Cros_talkBean cros_talkBean) {
                        Log.d(TAG, "onNext: modellmpl----"+cros_talkBean);
                        String code = cros_talkBean.getCode();
                        if ("0".equals(code)){
                            iPresenter.getCros_talk(cros_talkBean.getData());
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                            iPresenter.getError(e.getMessage());
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

P层

public interface IPresenter {
    void CrosToView(Map<String,String> map, IMainView iMainView);
    void getCros_talk(List<Cros_talkBean.DataBean> list);
    void getError(String error);
}
public class CrosPresenterlmpl implements IPresenter {
    private static final String TAG = "CrosPresenterlmpl==========";
    private IMainView iMainView;
    private IModel iModel;
    @Override
    public void CrosToView(Map<String, String> map, IMainView iMainView) {
        iModel=new CrosModellmpl(this);
        this.iMainView = iMainView;
            iModel.getCros_talk(map);
    }

    @Override
    public void getCros_talk(List<Cros_talkBean.DataBean> list) {
       // Log.d(TAG, "getCros_talk: presenterlmpl"+list);
            iMainView.showCros(list);

    }

    @Override
    public void getError(String error) {
      //  Log.e(TAG, "getError: dddddddd"+error );
            iMainView.showError(error);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值