MVP框架使用Fretiofit获取网络数据使用xrecycleview实现上拉加载下拉刷新

<?xml version="1.0" encoding="utf-8"?>
<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" tools:context="com.example.myrefiofit.MainActivity">
<com.jcodecraeer.xrecyclerview.XRecyclerView
    android:id="@+id/merv"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</com.jcodecraeer.xrecyclerview.XRecyclerView>

</RelativeLayout>
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/im"
        android:layout_width="200dp"
        android:layout_height="200dp"
        fresco:roundedCornerRadius="15dp" />

    <TextView
        android:id="@+id/frg_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="2222"
        android:layout_alignParentTop="true"
        android:layout_marginTop="43dp"
        />
</LinearLayout>
Myapp
package com.example.myrefiofit.app;

import android.app.Application;

import com.facebook.drawee.backends.pipeline.Fresco;

public class Myapp extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}
model
package com.example.myrefiofit.model;

import rx.Observer;


public interface IMovemodel {
    public  void  refit(int start, int count, Observer observer);
}
model
package com.example.myrefiofit.model;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
 * Retrofit Rxjava.
 */

public class Movemodel implements IMovemodel{
    @Override
    public void refit(int start, int count, Observer observer) {
        String baseUrl = "https://api.douban.com/v2/movie/";
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        // 步骤5:创建 网络请求接口 的实例
        Movise request = retrofit.create(Movise.class);
        request.getTopMovie(start,count)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }
}
model
package com.example.myrefiofit.model;

import com.example.myrefiofit.bean.MovieEntity;

import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;

/**
 * 注解
 */

public interface Movise {
        @GET("top250")
        Observable<MovieEntity> getTopMovie(@Query("start") int start, @Query("count") int count);

}
view
package com.example.myrefiofit.view;

import com.example.myrefiofit.bean.MovieEntity;

public interface Movisview {
    public  void  initdata(MovieEntity list);
    public  int getStart();
    public  int getCount();
}
p
package com.example.myrefiofit.presenter;

public interface Ipresenter<T> {

    public  void attch(T view);
    public  void  detch();
}
p
package com.example.myrefiofit.presenter;

import android.content.Context;
import android.util.Log;

import com.example.myrefiofit.bean.MovieEntity;
import com.example.myrefiofit.model.Movemodel;
import com.example.myrefiofit.view.Movisview;

import java.lang.ref.SoftReference;

import rx.Observer;

/**
 * presenter
 */

public class MovisePresenter implements  Ipresenter<Movisview> {

    Context context;
    Movemodel  model;
    SoftReference<Movisview> soview;
    MovieEntity list;
    public MovisePresenter(Context context, Movisview view) {
        list=new MovieEntity();
        this.context = context;
        model=new Movemodel();
        attch (view);
    }

    @Override
    public void attch(Movisview view) {
        soview =new SoftReference<Movisview>(view);
    }

    @Override
    public void detch() {
        soview.clear();
    }
    public  void  movsi(){
        int start = soview.get().getStart();
        int count = soview.get().getCount();
        model.refit(start, count, new Observer() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Object o) {
                list= (MovieEntity) o;
           
                soview.get().initdata(list);

            }
        });
    }
}
baseactivity基类
package com.example.myrefiofit;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.example.myrefiofit.presenter.Ipresenter;

/**
 * 基类
 */

public abstract class Baseactivity <T extends Ipresenter> extends AppCompatActivity {
    T presenter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        createpresenter();
    }
 public  abstract  void createpresenter();
    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.detch();
    }
}
Mainactivity
package com.example.myrefiofit;

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.widget.LinearLayoutManager;

import com.example.myrefiofit.adapter.Myadapter;
import com.example.myrefiofit.bean.MovieEntity;
import com.example.myrefiofit.presenter.MovisePresenter;
import com.example.myrefiofit.view.Movisview;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Baseactivity<MovisePresenter> implements Movisview{
    XRecyclerView merv;
    int start=0;
    int count=10;
    List<MovieEntity.SubjectsBean> list;
    Handler handler=new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initview();
        presenter.movsi();

    }
    //加载布局
    private void initview() {
        list=new ArrayList<>();
        merv= (XRecyclerView) findViewById(R.id.merv);
        LinearLayoutManager mar=new LinearLayoutManager(this);
        merv.setLayoutManager(mar);
        merv.setLoadingMoreEnabled(true);
    }

    @Override
    public void createpresenter() {
       presenter=new MovisePresenter(this,this);
    }

   //上拉加载下拉刷新
    @Override
    public void initdata(MovieEntity li) {
        list=li.getSubjects();
        Myadapter adapter=new Myadapter(this,list);
        merv.setAdapter(adapter);
        merv.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        start++;
                        presenter.movsi();;
                        merv.refreshComplete();
                    }
                },3000);
            }

            @Override
            public void onLoadMore() {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        count=count+10;
                        presenter.movsi();
                        merv.refreshComplete();
                    }
                },3000);
            }
        });
    }

    @Override
    public int getStart() {
        return start;
    }

    @Override
    public int getCount() {
        return count;
    }
}
Adapter
package com.example.myrefiofit.adapter;

import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.myrefiofit.R;
import com.example.myrefiofit.bean.MovieEntity;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;


public class Myadapter extends RecyclerView.Adapter<Myadapter.ViewHolder>{
    Context context;
    List<MovieEntity.SubjectsBean> list;

    public Myadapter(Context context, List<MovieEntity.SubjectsBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public Myadapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=View.inflate(context,R.layout.item,null);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }
   //fresoc图片加载
    @Override
    public void onBindViewHolder(Myadapter.ViewHolder holder, int position) {
        Uri uri=Uri.parse(list.get(position).getImages().getLarge());
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setUri(uri)
                .setAutoPlayAnimations(true)
                .build();
        holder.s_img.setController(controller);
        // Glide.with(context).load(sd.getSubjects().get(position).getImages().getLarge()).into(holder.im);
        holder.ttt.setText(list.get(position).getTitle());
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        SimpleDraweeView s_img;
        TextView ttt;
        public ViewHolder(View itemView) {
            super(itemView);
            s_img=itemView.findViewById(R.id.im);
            ttt=itemView.findViewById(R.id.frg_tv);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值