Recyclerview布局+spring上拉、下拉

依赖包

        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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值