MVP+xRecyclerView+Retrofit+OkHttp+RxJava展示列表


依赖================================================

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27



    defaultConfig {
        applicationId "com.example.appcode5"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

//添加部分
 configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '27.1.1'
            }
        }
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    //noinspection GradleCompatible
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'


//依赖
 implementation 'io.reactivex:rxjava:1.3.4'
    implementation 'io.reactivex:rxandroid:1.2.1'

    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0-beta4'

//compile project(':xrecyclerview')

    implementation 'com.facebook.fresco:fresco:0.12.0'//fresco

    implementation 'com.jcodecraeer:xrecyclerview:1.3.2'//xrecyclerview
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}

权限====================================================

<uses-permission android:name="android.permission.INTERNET"/>
android:name=".Modle.Api.MyApplication"

布局=======================================================

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".View.activity.MainActivity">

    <com.jcodecraeer.xrecyclerview.XRecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/xre"
        >

    </com.jcodecraeer.xrecyclerview.XRecyclerView>

</RelativeLayout>

item===========================================

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv"
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/sdv"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:layout_margin="10dp"
        fresco:roundedCornerRadius="20dp" />
</LinearLayout>

ApiService===========================================

package com.example.appcode5.Modle.Api;


import com.example.appcode5.Modle.bean.Data;
import com.example.appcode5.Modle.bean.DataBean;

import java.util.List;

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

public interface APIService {

    @GET("nba/")
    Observable<DataBean<List<Data>>> getBeanen(@Query("key") String key, @Query("num") int num);


}

MyApplicatior========================================

package com.example.appcode5.Modle.Api;

import android.app.Application;

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

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

    Data===============================================

package com.example.appcode5.Modle.bean;

public class Data {

    /**
     * ctime : 2016-12-04 13:00
     * title : 格林:理解科尔吸食大麻 不过我从没吸过
     * description : NBA新闻
     * picUrl : http://www.51tyw.com/uploads/allimg/161204/1-161204120131.jpg
     * url : http://www.51tyw.com/nba/2421.html
     */

    private String ctime;
    private String title;
    private String description;
    private String picUrl;
    private String url;

    public String getCtime() {
        return ctime;
    }

    public void setCtime(String ctime) {
        this.ctime = ctime;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getPicUrl() {
        return picUrl;
    }

    public void setPicUrl(String picUrl) {
        this.picUrl = picUrl;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

DataBean===============================================

package com.example.appcode5.Modle.bean;

public class DataBean <T>{
    private int code;
    private String msg;
    private  T newslist;

    //List<D>

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return newslist;
    }

    public void setData(T newslist) {
        this.newslist = newslist;
    }
}

DataModel======================================

package com.example.appcode5.Modle.IModle;

import com.example.appcode5.Presenter.MyDataPresenter;

public interface DataModel {

    void toDataUrl(String url, int num, MyDataPresenter presenter);

}

MyDataModel=====================================

package com.example.appcode5.Modle.IModle;

import android.util.Log;

import com.example.appcode5.Modle.Api.APIService;
import com.example.appcode5.Modle.bean.Data;
import com.example.appcode5.Modle.bean.DataBean;
import com.example.appcode5.Presenter.MyDataPresenter;

import java.util.List;

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;

public class MyDataModel implements DataModel{

    @Override
    public void toDataUrl(String url, int num, final MyDataPresenter presenter) {
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        APIService apiService = retrofit.create(APIService.class);

        apiService.getBeanen("71e58b5b2f930eaf1f937407acde08fe", num)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<DataBean<List<Data>>>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                        presenter.onFailed(e.getMessage());
                    }

                    @Override
                    public void onNext(DataBean<List<Data>> dataDataBean) {
                        Log.d("--", "onNext: "+dataDataBean.getData().size());
                        presenter.onSuccess(dataDataBean);
                    }
                });
    }
}

DataPresenter=======================================

package com.example.appcode5.Presenter;

public interface DataPresenter {

    void onSuccess(Object o);
    void onFailed(String e);

}

MyDataPresenter====================================

package com.example.appcode5.Presenter;

import com.example.appcode5.Modle.IModle.DataModel;
import com.example.appcode5.Modle.IModle.MyDataModel;
import com.example.appcode5.View.IView.DataView;

public class MyDataPresenter implements DataPresenter {
    private DataView dataview;
    private DataModel dataModel;

    public MyDataPresenter(DataView dataView) {

        this.dataview=dataView;
        dataModel=new MyDataModel();

    }

    @Override
    public void onSuccess(Object o) {
        dataview.getData(o);
    }

    @Override
    public void onFailed(String e) {

    }
    public void toDataUrl(String url,int num){
        dataModel.toDataUrl(url,num,this);
    }
}

MainActivity======================================

package com.example.appcode5.View.activity;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;

import com.example.appcode5.Modle.bean.Data;
import com.example.appcode5.Modle.bean.DataBean;
import com.example.appcode5.Presenter.MyDataPresenter;
import com.example.appcode5.R;
import com.example.appcode5.View.IView.DataView;
import com.example.appcode5.View.adapter.MyrecyAdapter;
import com.jcodecraeer.xrecyclerview.ProgressStyle;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

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

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity implements DataView {

    @BindView(R.id.xre)
    XRecyclerView xre;
    private String api = "http://api.tianapi.com/";
    private int num=15;
    private List<Data> list = new ArrayList<>();
    private MyrecyAdapter myrecyAdapter;
    private MyDataPresenter dataPresenter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        init();

        dataPresenter = new MyDataPresenter(this);

        //dataPresenter.toDataUrl(api,10);

        getBean();
    }

    private void init() {

        xre.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));

        xre.setPullRefreshEnabled(true);
        xre.setLoadingMoreEnabled(true);

        xre.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);
        xre.setLoadingMoreProgressStyle(ProgressStyle.Pacman);

        xre.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        num = 15;

                        getBean();

                        getAdapter();

                        xre.refreshComplete();
                    }
                },2000);




            }

            @Override
            public void onLoadMore() {

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        num += 10;

                        getBean();

                        getAdapter();

                        xre.refreshComplete();
                    }
                },2000);

            }
        });

    }

    public void getBean(){
        dataPresenter.toDataUrl(api,num);
    }

    @Override
    public void getData(Object o) {
        DataBean<List<Data>> dataBean= (DataBean<List<Data>>) o;
        Log.d("----", "getData: "+dataBean.getData().size());
        List<Data> data = dataBean.getData();

        list.clear();

        list.addAll(data);

        getAdapter();
    }

    void getAdapter(){
        if(myrecyAdapter == null){
            myrecyAdapter = new MyrecyAdapter(MainActivity.this, list);
            xre.setAdapter(myrecyAdapter);
        }else{
            myrecyAdapter.notifyDataSetChanged();
        }

    };
}

MyrecyAdapter==========================================

package com.example.appcode5.View.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.appcode5.Modle.bean.Data;
import com.example.appcode5.R;
import com.facebook.drawee.view.SimpleDraweeView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.util.List;

public class MyrecyAdapter extends XRecyclerView.Adapter {

    private Context context;
    private List<Data> list;

    public MyrecyAdapter(Context context, List<Data> list) {
        this.context = context;
        this.list = list;
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view=View.inflate(context,R.layout.item,null);
        ViewHolder viewHolder=new ViewHolder(view);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        ViewHolder viewHolder= (ViewHolder) holder;
        viewHolder.sdv.setImageURI(Uri.parse(list.get(position).getPicUrl()));
        viewHolder.tv.setText(list.get(position).getTitle());



    }

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


    class ViewHolder extends XRecyclerView.ViewHolder{

        private final SimpleDraweeView sdv;
        private final TextView tv;

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

            sdv = itemView.findViewById(R.id.sdv);
            tv = itemView.findViewById(R.id.tv);

        }
    }
}

DataView========================================

package com.example.appcode5.View.IView;

public interface DataView {

    void getData(Object o);

}


相关文章:

  • 2022-12-23
  • 2021-06-05
  • 2021-04-15
  • 2021-08-23
  • 2022-12-23
  • 2021-11-24
  • 2021-04-02
  • 2021-12-30
猜你喜欢
  • 2021-07-14
  • 2021-07-10
  • 2021-11-12
  • 2021-11-05
  • 2021-08-19
  • 2021-09-09
  • 2021-08-29
相关资源
相似解决方案