分类展示

首先我们需要两个接口

//用get方式请求
    //左侧
    public final static String LEFT_API="http://172.17.8.100/small/commodity/v1/findFirstCategory";
   //右侧
    public final static String RIGHT_API="http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?page=1&count=5&keyword=";

相对的我们也需要2个bean层

public class LeftBean {
    public  String message;
    public  String status;
    public List<ResultBean> result;
    public static class ResultBean {

        public String id;
        public String name;
    }
}
public class RightBean {
    public String message;
    public String status;
    public List<ResultBean> result;
    public static class ResultBean {
        public int commodityId;
        public String commodityName;
        public String masterPic;
        public int price;
        public int saleNum;
    }
}

相对的契约类里的方法也需要两个

package jiaoyibo.bawei.com.fenleizhanshi.contract;

import java.util.HashMap;

import jiaoyibo.bawei.com.fenleizhanshi.net.RequestCallBack;

/**
 * <p>文件描述:<p>
 * <p>作者:JYB<p>
 * <p>创建时间:2019/2/22<p>
 * <p>更改时间:2019/2/22<p>
 * <p>版本号:1<p>
 */
public interface LoadContract {
    //p层
    public abstract class LloadPresenter{
        public abstract void LeftPesenter(HashMap<String,String> map);
        public abstract void RightPesenter(HashMap<String,String> map);
    }
    //m层
    interface Lloadmodel{
        void LeftModel(HashMap<String,String> map, RequestCallBack callBack);
        void RighModel(HashMap<String,String> map, RequestCallBack callBack);
    }
    //v层
    interface LloadView{
        void LeftOnSuccess(String result);
        void LeftOnfailure(String msg);
        void RightOnSuccess(String result);
        void RightOnfailure(String msg);
    }
}

OkHttpUtils工具类不需要改变

import android.os.Handler;

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

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

/**
 * <p>文件描述:<p>
 * <p>作者:JYB<p>
 * <p>创建时间:2019/2/22<p>
 * <p>更改时间:2019/2/22<p>
 * <p>版本号:1<p>
 */
public class OkHttpUtils {
    private static OkHttpUtils mInstance;
    private final OkHttpClient okHttpClient;
    private Handler handler = new Handler();
    //单例模式
    public static OkHttpUtils getmInstance(){
        if(mInstance==null){
            synchronized (OkHttpUtils.class){
                if(mInstance==null){
                    mInstance=new OkHttpUtils();
                }
            }
        }
        return mInstance;
    }
    //私有构造
    private OkHttpUtils(){
        //拦截器
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        //设置拦截器
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        //创建OkHttpClient
        okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor)
                .writeTimeout(5,TimeUnit.SECONDS)
                .connectTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .build();
    }
    //get请求
    public void doGet(String url,final OkHttpCallBack okHttpCallBack){
        //创建Request
        Request build = new Request.Builder()
                .url(url)
                .get()
                .build();
        okHttpClient.newCall(build).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        okHttpCallBack.failure("网络异常");
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response.code()==200){
                    final String string = response.body().string();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            okHttpCallBack.Success(string);
                        }
                    });
                }
            }
        });
    }
    //post方式
    public void doPost(String url, HashMap<String,String> params, final OkHttpCallBack callBack){
        //拿到body
        FormBody.Builder builder = new FormBody.Builder();
        //添加参数
        for(Map.Entry<String,String>map:params.entrySet()){
            builder.add(map.getKey(),map.getValue());
        }
        //拿到RequestBody
        RequestBody requestBody = builder.build();
        //创建Request
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                if(callBack!=null){
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callBack.failure("网络连接不上");
                        }
                    });
                }
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(callBack!=null){
                    if(response.code()==200){
                        final String string = response.body().string();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                callBack.Success(string);
                            }
                        });
                    }
                }
            }
        });
    }
}

OkCallBack接口没有改变

public interface OkHttpCallBack {
    void Success(String result);
    void failure(String msg);
}

RequestCallBack也没有改变

public interface RequestCallBack {
    void Success(String result);
    void failure(String msg);
}

接下来就是Model层的一些操作,在原基础上添加了一些操作

import android.os.Handler;

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

import jiaoyibo.bawei.com.fenleizhanshi.api.UserApi;
import jiaoyibo.bawei.com.fenleizhanshi.contract.LoadContract;
import jiaoyibo.bawei.com.fenleizhanshi.net.OkHttpCallBack;
import jiaoyibo.bawei.com.fenleizhanshi.net.OkHttpUtils;
import jiaoyibo.bawei.com.fenleizhanshi.net.RequestCallBack;

/**
 * <p>文件描述:<p>
 * <p>作者:JYB<p>
 * <p>创建时间:2019/2/22<p>
 * <p>更改时间:2019/2/22<p>
 * <p>版本号:1<p>
 */
public class LoadModel implements LoadContract.Lloadmodel{
    private Handler handler = new Handler();
    private String key;
    private String value;
    @Override
    public void LeftModel(HashMap<String, String> map, final RequestCallBack callBack) {
        OkHttpUtils.getmInstance().doGet(UserApi.LEFT_API, new OkHttpCallBack() {
            @Override
            public void Success(final String result) {
                if(callBack!=null){
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callBack.Success(result);
                        }
                    });
                }
            }

            @Override
            public void failure(final String msg) {
                if(callBack!=null){
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callBack.failure(msg);
                        }
                    });
                }
            }
        });
    }

    @Override
    public void RighModel(HashMap<String, String> map, final RequestCallBack callBack) {
   		 //for循环遍历数据
        for(Map.Entry<String,String>map1:map.entrySet()){
            key = map1.getKey();
            value = map1.getValue();
        }
        String s = UserApi.RIGHT_API+value;
        OkHttpUtils.getmInstance().doGet(s, new OkHttpCallBack() {

            @Override
            public void Success(final String result) {
                if(callBack!=null){
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callBack.Success(result);
                        }
                    });
                }
            }

            @Override
            public void failure(final String msg) {
                if(callBack!=null){
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callBack.failure(msg);
                        }
                    });
                }
            }
        });
    }
}

presenter层没有太大的方法,就是多了个方法

import java.util.HashMap;

import jiaoyibo.bawei.com.fenleizhanshi.contract.LoadContract;
import jiaoyibo.bawei.com.fenleizhanshi.model.LoadModel;
import jiaoyibo.bawei.com.fenleizhanshi.net.RequestCallBack;

/**
 * <p>文件描述:<p>
 * <p>作者:JYB<p>
 * <p>创建时间:2019/2/22<p>
 * <p>更改时间:2019/2/22<p>
 * <p>版本号:1<p>
 */
public class LoadPresenter extends LoadContract.LloadPresenter {
    private LoadContract.LloadView lloadView;
    private final LoadModel loadModel;

    public LoadPresenter(LoadContract.LloadView lloadView) {
        this.lloadView = lloadView;
        loadModel = new LoadModel();
    }

    @Override
    public void LeftPesenter(HashMap<String, String> map) {
        loadModel.LeftModel(map, new RequestCallBack() {
            @Override
            public void Success(String result) {
                if(lloadView!=null){
                    lloadView.LeftOnSuccess(result);
                }
            }

            @Override
            public void failure(String msg) {
                if(lloadView!=null){
                    lloadView.LeftOnfailure(msg);
                }
            }
        });
    }

    @Override
    public void RightPesenter(HashMap<String, String> map) {
        loadModel.RighModel(map, new RequestCallBack() {
            @Override
            public void Success(String result) {
                if(lloadView!=null){
                    lloadView.RightOnSuccess(result);
                }
            }

            @Override
            public void failure(String msg) {
                if(lloadView!=null){
                    lloadView.RightOnfailure(msg);
                }
            }
        });
    }
}

接下来就是主页的操作

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.view.MenuItem;
import android.widget.TextView;

import com.google.gson.Gson;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.util.HashMap;

import jiaoyibo.bawei.com.fenleizhanshi02.adapter.LeftAdapter;
import jiaoyibo.bawei.com.fenleizhanshi02.adapter.RightAdapter;
import jiaoyibo.bawei.com.fenleizhanshi02.bean.LeftBean;
import jiaoyibo.bawei.com.fenleizhanshi02.bean.RightBean;
import jiaoyibo.bawei.com.fenleizhanshi02.contract.LoadContract;
import jiaoyibo.bawei.com.fenleizhanshi02.presenter.LoadPresenter;

public class ShowActivity extends AppCompatActivity implements LoadContract.LloadView,LeftAdapter.OnClickListener {

    private XRecyclerView xrec;
    private XRecyclerView xrec1;
    private LoadPresenter loadPresenter;
    private LeftAdapter leftAdapter;
    private RightAdapter rightAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);
        xrec = findViewById(R.id.xrec);
        xrec1 = findViewById(R.id.xrec1);
        //连接p层
        loadPresenter = new LoadPresenter(this);
        //设置布局样式
        xrec.setLayoutManager(new LinearLayoutManager(this));
        xrec1.setLayoutManager(new GridLayoutManager(this,3));
        //获取适配器
        leftAdapter = new LeftAdapter(this);
        rightAdapter = new RightAdapter(this);
        //创建左适配器p层的集合
        loadPresenter.LeftPresenter(new HashMap<String, String>());
        //创建一个空集合往里面存放数据
        HashMap<String,String> map = new HashMap<>();
        //传入参数
        map.put("Keyword","女装");
        //将集合赋值给右适配器
        loadPresenter.RightPresenter(map);
        //右布局展示,这一步最好写出来,不然会和做布局发生冲突
        xrec1.setAdapter(rightAdapter);
    }


    @Override
    public void LeftSuccess(String result) {
        //解析
        LeftBean leftBean = new Gson().fromJson(result, LeftBean.class);
        //左布局展示
        xrec.setAdapter(leftAdapter);
        //条目点击事件
        leftAdapter.setonItemClickLisener(this);
        //适配器数据展示
        leftAdapter.setList(leftBean.result);
    }

    @Override
    public void LeftFailure(String msg) {

    }

    @Override
    public void RightSuccess(String result) {
        //解析
        RightBean rightBean = new Gson().fromJson(result, RightBean.class);
        //适配器数据展示
        rightAdapter.setList(rightBean.result);

    }

    @Override
    public void RightFailure(String msg) {

    }

    @Override
    public void click(String cid) {
        //创建集合
        HashMap<String,String> map = new HashMap<>();
        //传入参数
        map.put("Keyword",cid);
        //将集合赋值给右适配器
        loadPresenter.RightPresenter(map);

    }
}

相对的就会有两个适配器

package jiaoyibo.bawei.com.fenleizhanshi.adapter;

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

import com.jcodecraeer.xrecyclerview.XRecyclerView;

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

import jiaoyibo.bawei.com.fenleizhanshi.R;
import jiaoyibo.bawei.com.fenleizhanshi.bean.LeftBean;

/**
 * <p>文件描述:<p>
 * <p>作者:JYB<p>
 * <p>创建时间:2019/2/22<p>
 * <p>更改时间:2019/2/22<p>
 * <p>版本号:1<p>
 */
public class LeftAdapter extends XRecyclerView.Adapter<LeftAdapter.ViewHolder> {
    private Context context;
    private List<LeftBean.ResultBean> list;

    public LeftAdapter(Context context) {
        this.context = context;
        list = new ArrayList<>();
    }

    public void setList(List<LeftBean.ResultBean> list) {
        if (list!=null){
            this.list = list;
        }
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.linear1,viewGroup,false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder,final int i) {
        LeftBean.ResultBean resultBean = list.get(i);
        viewHolder.name.setText(list.get(i).name);
        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(onClickListener!=null){
                    onClickListener.click(list.get(i).name.substring(0,2));
                }
            }
        });
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        private TextView name;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);
        }
    }
    private OnClickListener onClickListener;

    public void setonItemClickLisener(OnClickListener onClickListener) {
        this.onClickListener = onClickListener;
    }

    public interface OnClickListener{
        void click(String cid);
    }
}

package jiaoyibo.bawei.com.fenleizhanshi.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
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.bumptech.glide.Glide;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

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

import jiaoyibo.bawei.com.fenleizhanshi.R;
import jiaoyibo.bawei.com.fenleizhanshi.bean.RightBean;

/**
 * <p>文件描述:<p>
 * <p>作者:JYB<p>
 * <p>创建时间:2019/2/22<p>
 * <p>更改时间:2019/2/22<p>
 * <p>版本号:1<p>
 */
public class RightAdapter extends XRecyclerView.Adapter<RightAdapter.ViewHolder1> {
    private Context context;
    private List<RightBean.ResultBean> list;

    public RightAdapter(Context context) {
        this.context = context;
        list = new ArrayList<>();
    }

    public void setList(List<RightBean.ResultBean> list) {
        if (list!=null){
            this.list = list;
        };
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public ViewHolder1 onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view =LayoutInflater.from(context).inflate(R.layout.linear2,viewGroup,false);
        ViewHolder1 viewHolder1 = new ViewHolder1(view);
        return viewHolder1;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder1 viewHolder1, int i) {
        viewHolder1.name.setText(list.get(i).name);
		viewHolder1.name.setText(list.get(i).commodityName);
        String [] images = resultBean.masterPic.split("\\|");
        Glide.with(context).load(images[0]).into(viewHolder1.image);
    }

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

    public class ViewHolder1 extends RecyclerView.ViewHolder {
        private TextView name;
        private ImageView image;
        public ViewHolder1(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);
            image=itemView.findViewById(R.id.image);
        }
    }
}

主页面布局的操作

<?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="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        <com.jcodecraeer.xrecyclerview.XRecyclerView
            android:id="@+id/xrec"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            ></com.jcodecraeer.xrecyclerview.XRecyclerView>
        <View
            android:layout_width="2dp"
            android:layout_height="match_parent"
            android:background="#f00"/>
        <com.jcodecraeer.xrecyclerview.XRecyclerView
            android:id="@+id/xrec1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3"
            ></com.jcodecraeer.xrecyclerview.XRecyclerView>
    </LinearLayout>

</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:layout_margin="10dp"
    android:orientation="vertical"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/name"
        android:text="标题"
        android:textSize="25dp"
        android:maxLength="4"
        android:layout_marginTop="5dp"
        />
    <View
        android:layout_width="100dp"
        android:layout_height="2dp"
        android:background="#D1D1D1"/>
</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:layout_margin="10dp"
    >
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/image"
        android:src="@mipmap/ic_launcher"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/name"
        android:text="标题"
        android:layout_marginTop="110dp"
        android:textSize="15dp"
        android:layout_centerHorizontal="true"
        android:maxLength="4"
        />
</RelativeLayout>

</LinearLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值