XrecyclerView加载数据+切换不同布局

来源:互联网 发布:历年网络作家富豪榜 编辑:程序博客网 时间:2024/06/06 06:31
compile 'com.jcodecraeer:xrecyclerview:1.3.2'//XrecyclerView

显示界面

<?xml version="1.0" encoding="utf-8"?><LinearLayout 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"    android:orientation="vertical"    tools:context="wangxuewei.bwie.com.wangxuewei1510c2071219.MainActivity">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center_vertical">        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="10dp"            android:gravity="center"            android:text="搜索商品" />        <ImageView            android:id="@+id/cutImg"            android:layout_width="30dp"            android:layout_height="30dp"            android:layout_alignParentRight="true"            android:layout_margin="7dp"            android:src="@drawable/grid_icon" />    </RelativeLayout>    <TextView        android:layout_width="match_parent"        android:layout_height="2dp"        android:background="#c0c0c0" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="10dp"        android:orientation="horizontal">        <EditText            android:id="@+id/editKey"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:hint="请输入关键字" />        <Button            android:id="@+id/btnSearch"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="搜索" />    </LinearLayout>    <TextView        android:layout_width="match_parent"        android:layout_height="2dp"        android:background="#c0c0c0" />    <com.jcodecraeer.xrecyclerview.XRecyclerView        android:id="@+id/xrecyclerview"        android:layout_width="match_parent"        android:layout_height="wrap_content"></com.jcodecraeer.xrecyclerview.XRecyclerView></LinearLayout>

网格布局条目显示样式

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:gravity="center"    android:orientation="vertical">    <ImageView        android:id="@+id/GoodsIcon"        android:layout_width="80dp"        android:layout_height="80dp" />    <TextView        android:id="@+id/title"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_margin="10dp"        android:text="asdasd" />    <TextView        android:id="@+id/price"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="asdasd" />    <TextView        android:id="@+id/bargainPrice"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="5dp"        android:text="asdasd"        android:textColor="#f00" /></LinearLayout>

列表布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:gravity="center_vertical"    android:orientation="horizontal">    <ImageView        android:id="@+id/GoodsIcon"        android:layout_width="80dp"        android:layout_height="80dp" />    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="vertical">        <TextView            android:id="@+id/title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_margin="10dp"            android:text="asdasd" />        <LinearLayout            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_margin="10dp"            android:orientation="horizontal">            <TextView                android:id="@+id/price"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="asdasd" />            <TextView                android:id="@+id/bargainPrice"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginLeft="5dp"                android:text="asdasd"                android:textColor="#f00" />        </LinearLayout>    </LinearLayout></LinearLayout>

主界面

public class MainActivity extends AppCompatActivity implements ShopSearchViewAPI, View.OnClickListener {    private ImageView cutImg;    private Button btnSearch;    private List<GoodsBean.DataBean> list = new ArrayList<>();    private XRecyclerView xR;    private EditText editKey;    private int flag = 1;    private MyAdapter myAdapter;    private int i = 1;    private String string = "手机";    private String name;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //加载控件        initView();        getData("手机", "1");        //设置可上拉        xR.setPullRefreshEnabled(true);        xR.setLoadingMoreEnabled(true);        //设置上拉下拉样式        xR.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);        xR.setLaodingMoreProgressStyle(ProgressStyle.BallClipRotate);        clickListener();        xR.setLoadingListener(new XRecyclerView.LoadingListener() {            @Override            public void onRefresh() {                i = 1;                list.clear();                getData(string, "" + i);                xR.refreshComplete();            }            @Override            public void onLoadMore() {                i++;                getData(string, "" + i);                xR.loadMoreComplete();            }        });    }    public void getData(String key, String page) {        ShopSearchPresenter shopSearchPresenter = new ShopSearchPresenter(this, this);        shopSearchPresenter.getGoodsData("http://120.27.23.105/product/searchProducts", key, page);    }    private void clickListener() {        cutImg.setOnClickListener(this);        btnSearch.setOnClickListener(this);    }    private void initView() {        cutImg = (ImageView) findViewById(R.id.cutImg);        btnSearch = (Button) findViewById(R.id.btnSearch);        xR = (XRecyclerView) findViewById(R.id.xrecyclerview);        editKey = (EditText) findViewById(R.id.editKey);    }    @Override    public void getSuccess(Object o) {        GoodsBean o1 = (GoodsBean) o;        List<GoodsBean.DataBean> data = o1.getData();        list.addAll(data);        setMyAdapter(flag);    }    @Override    public void getFailed(Exception e) {    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.cutImg:                if (flag == 1) {                    cutImg.setImageResource(R.drawable.lv_icon);                    flag = 2;                } else {                    cutImg.setImageResource(R.drawable.grid_icon);                    flag = 1;                }                setMyAdapter(flag);                break;            case R.id.btnSearch:                list.clear();                name = editKey.getText().toString();                string = name;                getData(string, "1");                break;        }    }    public void setMyAdapter(int f) {        if (f == 1) {            // 线性布局管理器   VERTICAL默认样式/竖向显示       第三个参数是数据是否到过来显示            LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);            //添加布局管理器            xR.setLayoutManager(manager);            myAdapter = new MyAdapter(list, this, f);            xR.setAdapter(myAdapter);        } else if (f == 2) {            // 线性布局管理器   VERTICAL默认样式/竖向显示       第三个参数是数据是否到过来显示            GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false);            //添加布局管理器            xR.setLayoutManager(gridLayoutManager);            myAdapter = new MyAdapter(list, this, f);            xR.setAdapter(myAdapter);        }    }}

MyAdapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {    private List<GoodsBean.DataBean> list;    private Context context;    private int flag = 1;    private View inflate;    public MyAdapter(List<GoodsBean.DataBean> list, Context context, int flag) {        this.list = list;        this.context = context;        this.flag = flag;    }    @Override    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if (flag == 1) {            inflate = LayoutInflater.from(context).inflate(R.layout.lvitem, parent, false);        } else if (flag == 2) {            inflate = LayoutInflater.from(context).inflate(R.layout.griditem, parent, false);        }        MyViewHolder myViewHolder = new MyViewHolder(inflate);        return myViewHolder;    }    @Override    public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {        String images = list.get(position).getImages();        String[] split = images.split("\\|");        Glide.with(context).load(split[0]).into(holder.icon);        holder.title.setText(list.get(position).getTitle());        holder.bargainPrice.setText("折扣价:" + list.get(position).getBargainPrice() + "");        holder.price.setText("原价:" + list.get(position).getPrice());        holder.price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);    }    @Override    public int getItemCount() {        return list != null ? list.size() : 0;    }    class MyViewHolder extends RecyclerView.ViewHolder {        private ImageView icon;        private TextView title;        private TextView bargainPrice;        private TextView price;        public MyViewHolder(View itemView) {            super(itemView);            icon = (ImageView) itemView.findViewById(R.id.GoodsIcon);            title = (TextView) itemView.findViewById(R.id.title);            bargainPrice = (TextView) itemView.findViewById(R.id.bargainPrice);            price = (TextView) itemView.findViewById(R.id.price);        }    }}

ShopSearchModle

public class ShopSearchModle {    public void getData(String url, Map<String, String> map, final ShopSearchPresenterAPI shopSearchPresenterAPI) {        HttpUtils.getInstance().get(url, map, new CallBack() {            @Override            public void onSuccess(Object o) {                shopSearchPresenterAPI.success(o);            }            @Override            public void onFailed(Exception e) {                shopSearchPresenterAPI.failed(e);            }        }, GoodsBean.class);    }}

ShopSearchPresenter

public class ShopSearchPresenter {    private ShopSearchViewAPI shopSearchViewAPI;    private Context context;    private final ShopSearchModle shopSearchModle;    public ShopSearchPresenter(ShopSearchViewAPI shopSearchViewAPI, Context context) {        this.shopSearchViewAPI = shopSearchViewAPI;        this.context = context;        shopSearchModle = new ShopSearchModle();    }    public void getGoodsData(String url, String keywords, String page) {        Map<String, String> map = new HashMap<>();        map.put("keywords", keywords);        map.put("page", page);        shopSearchModle.getData(url, map, new ShopSearchPresenterAPI() {            @Override            public void success(Object o) {                shopSearchViewAPI.getSuccess(o);            }            @Override            public void failed(Exception e) {                shopSearchViewAPI.getFailed(e);            }        });    }}

ShopSearchPresenterAPI

public interface ShopSearchPresenterAPI {    void success(Object o);    void failed(Exception e);}

重点内容

package wangxuewei.bwie.com.wangxuewei1510c2071219;/** * Created by jim on 2017/12/19. */public interface ShopSearchViewAPI {    void getSuccess(Object o);    void getFailed(Exception e);}

HttpUtils

public class HttpUtils {    private static volatile HttpUtils instance;    private static Handler handler = new Handler();    private HttpUtils() {    }    public static HttpUtils getInstance() {        if (instance == null) {            synchronized (HttpUtils.class) {                if (instance == null) {                    instance = new HttpUtils();                }            }        }        return instance;    }    //get请求    public void get(String url, Map<String, String> map, final CallBack callBack, final Class c) {        //对url和参数做拼接处理        StringBuffer stringBuffer = new StringBuffer();        stringBuffer.append(url);        //判断是否存在?   if中是存在        if (stringBuffer.indexOf("?") != -1) {            //判断?是否在最后一位    if中是不在最后一位            if (stringBuffer.indexOf("?") != stringBuffer.length() - 1) {                stringBuffer.append("&");            }        } else {            stringBuffer.append("?");        }        for (Map.Entry<String, String> entry : map.entrySet()) {            stringBuffer.append(entry.getKey())                    .append("=")                    .append(entry.getValue())                    .append("&");        }        //判断是否存在&   if中是存在        if (stringBuffer.indexOf("&") != -1) {            stringBuffer.deleteCharAt(stringBuffer.lastIndexOf("&"));        }        //1:创建OkHttpClient对象        OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Logger()).build();        //2:创建Request对象        final Request request = new Request.Builder()                .get()                .url(stringBuffer.toString())                .build();        //3:创建Call对象        Call call = okHttpClient.newCall(request);        //4:请求网络        call.enqueue(new Callback() {            //请求失败            @Override            public void onFailure(Call call, final IOException e) {                handler.post(new Runnable() {                    @Override                    public void run() {                        callBack.onFailed(e);                    }                });            }            //请求成功            @Override            public void onResponse(Call call, Response response) throws IOException {                String result = response.body().string();                //拿到数据解析                final Object o = new Gson().fromJson(result, c);                //当前是在子线程,回到主线程中                handler.post(new Runnable() {                    @Override                    public void run() {                        //回调                        callBack.onSuccess(o);                    }                });            }        });    }    //post请求    public void post(String url, Map<String, String> map, final CallBack callBack, final Class c) {        //1:创建OkHttpClient对象        OkHttpClient okHttpClient = new OkHttpClient();        //2:提供post请求需要的body对象        FormBody.Builder builder = new FormBody.Builder();        for (Map.Entry<String, String> entry : map.entrySet()) {            builder.add(entry.getKey(), entry.getValue());        }        FormBody body = builder.build();        //3:创建Request对象        final Request request = new Request.Builder()                .post(body)                .url(url)                .build();        //4:创建Call对象        Call call = okHttpClient.newCall(request);        //5:请求网络        call.enqueue(new Callback() {            //请求失败            @Override            public void onFailure(Call call, final IOException e) {                handler.post(new Runnable() {                    @Override                    public void run() {                        callBack.onFailed(e);                    }                });            }            //请求成功            @Override            public void onResponse(Call call, Response response) throws IOException {                String result = response.body().string();                //拿到数据解析                final Object o = new Gson().fromJson(result, c);                //当前是在子线程,回到主线程中                handler.post(new Runnable() {                    @Override                    public void run() {                        //回调                        callBack.onSuccess(o);                    }                });            }        });    }}

重点内容

public interface CallBack {    void onSuccess(Object o);    void onFailed(Exception e);}

Logger

public class Logger implements Interceptor {    @Override    public Response intercept(Chain chain) throws IOException {        Request original = chain.request();        HttpUrl url = original.url().newBuilder()                .addQueryParameter("source", "android")                .build();        //添加请求头        Request request = original.newBuilder()                .url(url)                .build();        return chain.proceed(request);    }}