使用RecyclerView列表数据展示

activity_recyclerview

<?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.bwie.test.recyclerviewdemo.RecyclerviewActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>

</RelativeLayout>

item_recycler

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp">
    <ImageView
        android:id="@+id/image_view"
        android:layout_width="100dp"
        android:layout_height="100dp" />
    <TextView
        android:id="@+id/text_title"
        android:layout_toRightOf="@id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="111"/>
    <TextView
        android:id="@+id/text_price"
        android:layout_toRightOf="@id/image_view"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ff0000"
        android:text="111"/>
</RelativeLayout>

RecyclerviewActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.bwie.test.adapter.ReayAdapter;
import com.bwie.test.bean.SeekBean;
import com.bwie.test.presenter.Presenter;
import com.bwie.test.util.ApiUrl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class RecyclerviewActivity extends AppCompatActivity implements MyView{
    private RecyclerView recycler_view;
    private Presenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recyclerview);
        //隐藏原有标题
        getSupportActionBar().hide();
        //查找控件
        recycler_view = (RecyclerView) findViewById(R.id.recycler_view);
        presenter = new Presenter(this);
        presenter.attachView(this);

        Map<String, String> map = new HashMap<>();
        map.put("keywords","笔记本");
        map.put("page","1");
        presenter.getUrl(ApiUrl.seek,map);
    }

    @Override
    public void getSeekBean(final SeekBean seekBean) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                final List<SeekBean.DataBean> list = seekBean.getData();
                recycler_view.setLayoutManager(new LinearLayoutManager(RecyclerviewActivity.this,
                        LinearLayoutManager.VERTICAL,false));
                ReayAdapter adapter = new ReayAdapter(RecyclerviewActivity.this, list);
                recycler_view.setAdapter(adapter);
                adapter.setOnClicklist(new OnClicklist() {
                    @Override
                    public void setOnClick(int position) {
                        int pid = list.get(position).getPid();
                    }
                });
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (presenter!=null){
            presenter.detachView();
        }
    }
}

MyView

import com.bwie.test.bean.SeekBean;

public interface MyView {
    void getSeekBean(SeekBean seekBean);
    //void getXiangQingBean(XiangQingBean xiangQingBean);
}

OnClicklist

public interface OnClicklist {
    void setOnClick(int position);
}

adapter文件夹下RecyAdapter

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bumptech.glide.Glide;
import com.bwie.test.bean.SeekBean;
import com.bwie.test.recyclerviewdemo.OnClicklist;
import java.util.List;
import com.bwie.test.recyclerviewdemo.R;

public class ReayAdapter extends RecyclerView.Adapter<MyHolder>{
    private final Context context;
    private final List<SeekBean.DataBean> list;
    private OnClicklist onClicklist;

    public ReayAdapter(Context context, List<SeekBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_recycler, parent, false);
        MyHolder holder = new MyHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyHolder holder, final int position) {
        SeekBean.DataBean dataBean = list.get(position);
        String[] split = dataBean.getImages().split("\\|");
        Glide.with(context).load(split[0]).into(holder.image_view);
        holder.text_title.setText(dataBean.getTitle());
        holder.text_price.setText("¥:"+dataBean.getPrice());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClicklist.setOnClick(position);
            }
        });
    }

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

    public void setOnClicklist(OnClicklist onClicklist){
        this.onClicklist = onClicklist;
    }
}

MyHolder

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.bwie.test.recyclerviewdemo.R;

public class MyHolder extends RecyclerView.ViewHolder{
    public ImageView image_view;
    public TextView text_title;
    public TextView text_price;

    public MyHolder(View itemView) {
        super(itemView);
        image_view = itemView.findViewById(R.id.image_view);
        text_title = itemView.findViewById(R.id.text_title);
        text_price = itemView.findViewById(R.id.text_price);
    }
}

model文件夹下Model

import com.bwie.test.bean.SeekBean;
import com.bwie.test.presenter.PresenterPort;
import com.bwie.test.util.OkHttpUtil;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class Model {
    private PresenterPort presenterPort;

    public Model(PresenterPort presenterPort) {
        this.presenterPort = presenterPort;
    }

    public void getUrl(String seek, Map<String, String> map) {
        OkHttpUtil.doPost(seek, map, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    //Log.d("+++++++",response.body().string()+"");
                    SeekBean seekBean = new Gson().fromJson(response.body().string(), SeekBean.class);
                    presenterPort.getSeekBean(seekBean);
                }
            }
        });
    }
}

//    public void getxiangUrl(String xiangqing, HashMap<String, String> map) {
//        OkHttpUtil.doPost(xiangqing, map, new Callback() {
//            @Override
//            public void onFailure(Call call, IOException e) {
//
//            }
//
//            @Override
//            public void onResponse(Call call, Response response) throws IOException {
//                if (response.isSuccessful()){
//                    //Log.d("+++++++",response.body().string()+"");
//                    XiangQingBean xiangQingBean = new Gson().fromJson(response
//                            .body().string(), XiangQingBean.class);
//                    presenterPort.getXiangQingBean(xiangQingBean);
//                }
//            }
//        });
//    }

presenter文件夹下BasePresenter

import java.lang.ref.Reference;
import java.lang.ref.WeakReference;

public abstract class BasePresenter<T> {
    protected Reference<T> mViewRef;//View接口类型弱引用

    public void attachView(T view) {
        mViewRef = new WeakReference<T>(view); //建立关联
    }

    protected T getView() {
        return mViewRef.get();//获取View
    }

    public boolean isViewAttached() {//判断是否与View建立了关联
        return mViewRef != null && mViewRef.get() != null;
    }

    public void detachView() {//解除关联
        if (mViewRef != null) {
            mViewRef.clear();
            mViewRef = null;
        }
    }
}

Presenter

import com.bwie.test.bean.SeekBean;
import com.bwie.test.model.Model;
import com.bwie.test.recyclerviewdemo.MyView;
import java.util.Map;

public class Presenter extends BasePresenter implements PresenterPort{
    private MyView myView;
    private final Model model;

    public Presenter(MyView myView) {
        model = new Model(this);
        this.myView = myView;
    }

    @Override
    public void getSeekBean(SeekBean seekBean) {
        myView.getSeekBean(seekBean);
    }

    public void getUrl(String seekbean, Map<String, String> map) {
        model.getUrl(seekbean,map);
    }
}

PresenterPort

import com.bwie.test.bean.SeekBean;

public interface PresenterPort {
    void getSeekBean(SeekBean seekBean);
    //void getXiangQingBean(XiangQingBean xiangQingBean);
}

util文件夹下ApiUtil

public class ApiUrl {
    public static String seek="https://www.zhaoapi.cn/product/searchProducts";
    public static String xiangqing="https://www.zhaoapi.cn/product/getProductDetail";
}

OkHttpUtil

import android.os.Environment;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;

public class OkHttpUtil {
    private static OkHttpClient okHttpClient = null;

    private OkHttpUtil(){
    }
    public static OkHttpClient getinfice(){
        if (okHttpClient==null){
            synchronized (OkHttpUtil.class){
                if (okHttpClient==null){
                    File sdcache = new File(Environment.getExternalStorageDirectory(), "cache");
                    //指定缓存大小
                    int cacheSize = 10 * 1024 * 1024;

                    okHttpClient = new OkHttpClient.Builder()//构建器
                            .connectTimeout(15, TimeUnit.SECONDS)//连接超时
                            .writeTimeout(20, TimeUnit.SECONDS)//写入超时
                            .readTimeout(20, TimeUnit.SECONDS)//读取超时
                            //.addInterceptor(new CommonParamsInterceptor())//添加的是应用拦截器
                            //.addNetworkInterceptor(new CacheInterceptor())//添加的网络拦截器
                            .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize))//设置缓存
                            .build();
                }
            }
        }
        return okHttpClient;
    }

    public static void doPost(String url, Map<String,String> map, Callback callback){
        Map<String, String> hashMap = new HashMap<>();
        hashMap.put("source","android");
        OkHttpClient okHttpClient = getinfice();
        FormBody.Builder builder = new FormBody.Builder();
        for (String key:map.keySet()){
            builder.add(key,map.get(key));
        }

        for (Map.Entry<String,String> entry:hashMap.entrySet()){
            builder.add(entry.getKey(),entry.getValue());
        }
        Request request = new Request.Builder().url(url).post(builder.build())
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(callback);
    }
}

使用的方法和依赖

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
compile'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:okhttp-urlconnection:3.4.1'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.github.bumptech.glide:glide:3.7.0'

bean文件夹下SeekBean

import java.util.List;

public class SeekBean {
    private String msg;
    private String code;
    private String page;
    private List<DataBean> data;

    public String getMsg() {
        return msg;
    }

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

    public String getCode() {
        return code;
    }

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

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private double price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;

        public double getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getDetailUrl() {
            return detailUrl;
        }

        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public int getItemtype() {
            return itemtype;
        }

        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }

        public int getPid() {
            return pid;
        }

        public void setPid(int pid) {
            this.pid = pid;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }

        public int getPscid() {
            return pscid;
        }

        public void setPscid(int pscid) {
            this.pscid = pscid;
        }

        public int getSalenum() {
            return salenum;
        }

        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }

        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }

        public String getTitle() {
            return title;
        }

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

猜你喜欢

转载自blog.csdn.net/gh323093/article/details/79995138