您的位置:首页 > 理论基础 > 计算机网络

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

2017-11-08 19:31 531 查看
<?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, in
4000
t 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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MVP Fretiofit fresco
相关文章推荐