Recyclerview布局+spring上拉、下拉

来源:互联网 发布:git clone ssh 端口 编辑:程序博客网 时间:2024/06/14 14:28

依赖包

        apply plugin:'com.android.application'        android {            compileSdkVersion 25            buildToolsVersion "26.0.1"            defaultConfig {                applicationId "com.example.adminjs.zhaokaoer"                minSdkVersion 15                targetSdkVersion 25                versionCode 1                versionName "1.0"            }            buildTypes {                release {                    minifyEnabled false                    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'                }            }        }        dependencies {            compile fileTree(include: ['*.jar'], dir: 'libs')            testCompile 'junit:junit:4.12'            compile 'com.android.support:appcompat-v7:25.+'            compile 'com.squareup.okhttp3:okhttp:3.9.0'            compile 'com.google.code.gson:gson:2.8.2'            compile 'com.android.support:recyclerview-v7:25.3.1'            compile 'com.jakewharton:butterknife:7.0.0'            compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'            compile 'com.liaoinstan.springview:library:1.3.0'            compile 'com.github.bumptech.glide:glide:3.7.0'            compile 'com.android.support:recyclerview-v7:25.3.1'        }

activity_main.xml布局

        <?xml version="1.0" encoding="utf-8"?>        <LinearLayout 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"            android:orientation="vertical"            >            <com.liaoinstan.springview.widget.SpringView                android:id="@+id/springview"                android:layout_width="match_parent"                android:layout_height="wrap_content">        <android.support.v7.widget.RecyclerView            android:id="@+id/recyclerview"            android:layout_width="match_parent"            android:layout_height="wrap_content">        </android.support.v7.widget.RecyclerView>            </com.liaoinstan.springview.widget.SpringView>        </LinearLayout>

item1.xml布局

        <?xml version="1.0" encoding="utf-8"?>        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="horizontal">            <ImageView                android:layout_width="80dp"                android:layout_height="80dp"                android:id="@+id/list_item1_imageview"/>            <TextView                android:padding="25dp"                android:text="aaa"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:id="@+id/list_item1_textview"/>        </LinearLayout>        **MainActivity页面**        package com.example.adminjs.zhaokaoer;        import android.app.Activity;        import android.os.Bundle;        import android.support.v7.widget.LinearLayoutManager;        import android.support.v7.widget.RecyclerView;        import android.widget.Toast;        import com.example.adminjs.zhaokaoer.presenter.MultilActivityPresenter;        import com.liaoinstan.springview.container.DefaultFooter;        import com.liaoinstan.springview.container.DefaultHeader;        import com.liaoinstan.springview.widget.SpringView;        import butterknife.Bind;        import butterknife.ButterKnife;        public class MainActivity extends Activity implements MultiView {            @Bind(R.id.recyclerview)            RecyclerView recyclerview;            @Bind(R.id.springview)            SpringView springview;            private MultilActivityPresenter presenter;            private MultilActivityAdapter adapter;            @Override            protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                setContentView(R.layout.activity_main);                ButterKnife.bind(this);                presenter = new MultilActivityPresenter(this);                adapter = new MultilActivityAdapter(this);                LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);                recyclerview.setLayoutManager(manager);                recyclerview.setAdapter(adapter);                springview.setHeader(new DefaultHeader(this));                springview.setFooter(new DefaultFooter(this));                springview.setListener(new SpringView.OnFreshListener() {                    @Override                    public void onRefresh() {                        presenter.onRefresh(true);                    }                    @Override                    public void onLoadmore() {                        presenter.onRefresh(false);                    }                });                presenter.onRefresh(true);            }            @Override            public void success(MultiBean bean) {                if (springview != null) {                    springview.onFinishFreshAndLoad();                }                adapter.addData(bean.getResult().getList());            }            @Override            public void failure(Exception e) {                Toast.makeText(this, " error ", Toast.LENGTH_SHORT).show();            }        }

M(MuItilActivityModule页面)

        package com.example.adminjs.zhaokaoer.module;        import com.example.adminjs.zhaokaoer.MultiBean;        import com.example.adminjs.zhaokaoer.okhttp.AbstractUiCallBack;        import com.example.adminjs.zhaokaoer.okhttp.OkhttpUtils;        /**         * Created by Adminjs on 2017/11/10.         */        public class MuItilActivityModule {            public void onRefresh(boolean up, final ModuleCallBack callBack) {                OkhttpUtils.getInstance().asy(null, "http://v.juhe.cn/weixin/query?key=88f7bbc507e3ecacfaeab2b47dd8936f", new AbstractUiCallBack<MultiBean>() {                    @Override                    public void success(MultiBean bean) {                        callBack.success(bean);                    }                    @Override                    public void failure(Exception e) {                        callBack.failure(e);                    }                });            }            public  interface ModuleCallBack {                public void success(MultiBean bean);                public void failure(Exception bean);            }        }

V(MultiView)

        package com.example.adminjs.zhaokaoer;        /**         * Created by Adminjs on 2017/11/10.         */        public interface MultiView {            public void success(MultiBean bean);            public void failure(Exception e);        }

P(MultilActivityPresenter)

        package com.example.adminjs.zhaokaoer.presenter;        import com.example.adminjs.zhaokaoer.MultiBean;        import com.example.adminjs.zhaokaoer.MultiView;        import com.example.adminjs.zhaokaoer.module.MuItilActivityModule;        /**         * Created by muhanxi on 17/11/10.         */        public class MultilActivityPresenter {            private MultiView view;            private MuItilActivityModule multilActivityModule ;            public MultilActivityPresenter(MultiView view){                this.view = view;                this.multilActivityModule = new MuItilActivityModule();            }            /**             * 下啦刷新             */            public void onRefresh(boolean up) {                multilActivityModule.onRefresh(up, new MuItilActivityModule.ModuleCallBack() {                    @Override                    public void success(MultiBean bean) {                        view.success(bean);                    }                    @Override                    public void failure(Exception e) {                        view.failure(e);                    }                });            }        }

OKHttp页面

        package com.example.adminjs.zhaokaoer.okhttp;        import com.example.adminjs.zhaokaoer.LoggingInterceptor;        import java.io.File;        import java.util.Map;        import java.util.concurrent.TimeUnit;        import okhttp3.FormBody;        import okhttp3.MediaType;        import okhttp3.MultipartBody;        import okhttp3.OkHttpClient;        import okhttp3.Request;        import okhttp3.RequestBody;        /**         * Created by muhanxi on 17/11/10.         *         *         * Okhttp 单例 范型的封装         */        public class OkhttpUtils {            private static OkhttpUtils okhttpUtils = null ;            private OkhttpUtils(){            }            public static OkhttpUtils getInstance(){                if(okhttpUtils == null){                    okhttpUtils = new OkhttpUtils();                    client = new OkHttpClient.Builder()                            .readTimeout(20, TimeUnit.SECONDS)                            .writeTimeout(20,TimeUnit.SECONDS)                            .connectTimeout(20,TimeUnit.SECONDS)                            .addInterceptor(new LoggingInterceptor())                            .build();                }                return okhttpUtils ;            }            private static OkHttpClient client ;            public void asy(Map<String,String> params,String url,AbstractUiCallBack callBack){                Request request = null ;                if(params != null){                    FormBody.Builder builder = new FormBody.Builder() ;                    for(Map.Entry<String,String> entry : params.entrySet()){                        builder.add(entry.getKey(),entry.getValue());                    }                    FormBody body =  builder.build();                    request = new Request.Builder()                            .url(url)                            .post(body)                            .build();                } else {                    request = new Request.Builder()                            .url(url)                            .build();                }                client.newCall(request).enqueue(callBack);            }            private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");            public static void postFile(Map<String,String> map, String url, File file,AbstractUiCallBack callBack){                String [] array =  file.getAbsolutePath().split("\\/");                MultipartBody.Builder builder = new MultipartBody.Builder();                builder.setType(MultipartBody.FORM);                for(Map.Entry<String,String> entry : map.entrySet()){                    builder.addFormDataPart(entry.getKey(),entry.getValue());                }                builder.addFormDataPart("imageFileName",array[array.length-1]);                if(file.exists() && file.length() > 0){                    builder.addFormDataPart("image",array[array.length-1], RequestBody.create(MEDIA_TYPE_PNG,file));                }                MultipartBody body =  builder.build() ;                Request request = new Request.Builder()                        .url(url)                        .post(body)                        .build();                client.newCall(request).enqueue(callBack);            }        }

AbstractUiCallBack

        package com.example.adminjs.zhaokaoer.okhttp;        import android.os.Handler;        import android.os.Looper;        import com.google.gson.Gson;        import com.google.gson.JsonSyntaxException;        import java.io.IOException;        import java.lang.reflect.ParameterizedType;        import java.lang.reflect.Type;        import okhttp3.Call;        import okhttp3.Callback;        import okhttp3.Response;        /**         * Created by muhanxi on 17/11/10.         * <p>         * * Okhttp 单例 范型的封装         */        public abstract class AbstractUiCallBack<T> implements Callback {            /**             * 成功回调             *             * @param t             */            public abstract void success(T t);            /**             * 失败回调             *             * @param e             */            public abstract void failure(Exception e);            private Handler handler = null;            private Class clazz;            public AbstractUiCallBack() {                handler = new Handler(Looper.getMainLooper());                //  得到的是一个 AbstractUiCallBack<T> 的Type                Type type = getClass().getGenericSuperclass();                // 得到的是T的实际Type                Type[] arr = ((ParameterizedType) type).getActualTypeArguments();                clazz = (Class) arr[0];            }            @Override            public void onFailure(Call call, IOException e) {                failure(e);            }            @Override            public void onResponse(Call call, Response response) throws IOException {                try {                    String result = response.body().string();                    System.out.println("result = " + result);                    Gson gson = new Gson();                    final T t = (T) gson.fromJson(result, clazz);                    handler.post(new Runnable() {                        @Override                        public void run() {                            success(t);                        }                    });                } catch (IOException e) {                    e.printStackTrace();                    failure(e);                } catch (JsonSyntaxException e) {                    e.printStackTrace();                    failure(e);                }            }        }

适配器(MultilActivityAdapter)

        package com.example.adminjs.zhaokaoer;        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.ImageView;        import android.widget.TextView;        import com.nostra13.universalimageloader.core.ImageLoader;        import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;        import java.util.ArrayList;        import java.util.List;        import butterknife.Bind;        import butterknife.ButterKnife;        /**         * Created by Adminjs on 2017/11/10.         */        public class MultilActivityAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {            private Context context;            private List<MultiBean.ResultBean.ListBean> list;            public MultilActivityAdapter(Context context) {                this.context = context;                ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));            }            public void addData(List<MultiBean.ResultBean.ListBean> list) {                if (this.list == null) {                    this.list = new ArrayList<>();                }                this.list.addAll(list);                notifyDataSetChanged();            }            @Override            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {                View view1 = LayoutInflater.from(context).inflate(R.layout.item1, parent, false);                return new ViewHolder1(view1);            }            @Override            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {                if (holder instanceof ViewHolder1) {                    ViewHolder1 holder1 = (ViewHolder1) holder;                    holder1.listItem1Textview.setText(list.get(position).getTitle());                    ImageLoader.getInstance().displayImage(list.get(position).getFirstImg(), holder1.listItem1Imageview);                }            }            @Override            public int getItemCount() {                return list == null ? 0 : list.size();            }            static class ViewHolder1 extends RecyclerView.ViewHolder {                @Bind(R.id.list_item1_imageview)                ImageView listItem1Imageview;                @Bind(R.id.list_item1_textview)                TextView listItem1Textview;                public ViewHolder1(View view) {                    super(view);                    ButterKnife.bind(this, view);                }            }        }

拦截器LoggingInterceptor

        package com.example.adminjs.zhaokaoer;        import java.io.IOException;        import okhttp3.Interceptor;        import okhttp3.Request;        import okhttp3.Response;        public class LoggingInterceptor implements Interceptor {          @Override public Response intercept(Chain chain) throws IOException {            Request request = chain.request();            long t1 = System.nanoTime();        //    logger.info(String.format("Sending request %s on %s%n%s",        //        request.url(), chain.connection(), request.headers()));            Response response = chain.proceed(request);            long t2 = System.nanoTime();        //    logger.info(String.format("Received response for %s in %.1fms%n%s",        //        response.request().url(), (t2 - t1) / 1e6d, response.headers()));            System.out.println("t2 = " + (t2-t1));            return response;          }        }
阅读全文
0 0