主页面布局

<?  version=\"1.0\" encoding=\"utf-8\"?>
<RelativeLayout  ns:android=\"http://schemas.android.com/apk/res/android\"
     ns:app=\"http://schemas.android.com/apk/res-auto\"
     ns:tools=\"http://schemas.android.com/tools\"
    android:layout_width=\"match_parent\"
    android:layout_height=\"match_parent\"
    tools:context=\".MainActivity\">

    <RelativeLayout
        android:id=\"@+id/layout_top\"
        android:layout_width=\"match_parent\"
        android:layout_height=\"50dp\"
        android:background=\"@color/colorPrimary\">

        <TextView
            android:layout_width=\"wrap_content\"
            android:layout_height=\"wrap_content\"
            android:layout_centerHorizontal=\"true\"
            android:layout_centerInParent=\"true\"
            android:text=\"购物车\"
            android:textColor=\"#ffffff\"
            android:textSize=\"16sp\" />

    </RelativeLayout>

    <!--左边的列表-->
    <android.support.v7.widget.RecyclerView
        android:id=\"@+id/recyclerview_shop_type\"
        android:layout_width=\"wrap_content\"
        android:layout_height=\"match_parent\"
        android:layout_below=\"@+id/layout_top\"
        android:background=\"#eeeeee\" />

    <View
        android:id=\"@+id/view_line\"
        android:layout_width=\"1dp\"
        android:layout_height=\"match_parent\"
        android:layout_below=\"@+id/layout_top\"
        android:layout_toRightOf=\"@+id/recyclerview_shop_type\"
        android:background=\"#333333\" />

    <!--右边的列表-->
    <android.support.v7.widget.RecyclerView
        android:id=\"@+id/recyclerview_shop\"
        android:layout_width=\"match_parent\"
        android:layout_height=\"match_parent\"
        android:layout_alignRight=\"@+id/layout_top\"
        android:layout_below=\"@+id/layout_top\"
        android:layout_toRightOf=\"@+id/view_line\" />

</RelativeLayout>

 左边商家布局

shop_type_adapter

<?  version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout  ns:android=\"http://schemas.android.com/apk/res/android\"
    android:layout_width=\"wrap_content\"
    android:layout_height=\"match_parent\"
    android:id=\"@+id/ll_shop_type\"
    android:layout_gravity=\"center\"
    android:padding=\"10dp\"
    >
    <TextView
        android:id=\"@+id/tv_shop_type_name\"
        android:layout_width=\"wrap_content\"
        android:layout_height=\"wrap_content\" />

</LinearLayout>

右边商品布局

shop_type_product_adapter

<LinearLayout  ns:android=\"http://schemas.android.com/apk/res/android\"
    android:layout_width=\"match_parent\"
    android:layout_height=\"match_parent\"
    android:orientation=\"vertical\"
    >
    <TextView
        android:id=\"@+id/tv_shop_type_product_name\"
        android:layout_width=\"match_parent\"
        android:layout_height=\"wrap_content\"
        android:background=\"@color/colorPrimary\"
        android:padding=\"2dp\"
        android:textColor=\"#ffffff\"
        android:textSize=\"16sp\" />

    <RelativeLayout
        android:layout_width=\"match_parent\"
        android:layout_height=\"wrap_content\">

    <android.support.v7.widget.RecyclerView
        android:id=\"@+id/recyclerview_shop_product\"
        android:layout_width=\"match_parent\"
        android:layout_height=\"wrap_content\" />
    </RelativeLayout>

</LinearLayout>

shop_type_product_linear_adapter

<LinearLayout  ns:android=\"http://schemas.android.com/apk/res/android\"
    android:layout_width=\"match_parent\"
    android:layout_height=\"wrap_content\"
    android:gravity=\"center_vertical\"
    android:padding=\"4dp\"
    android:orientation=\"horizontal\"
    >
    <ImageView
        android:id=\"@+id/iv_shop_type_product_linear\"
        android:layout_width=\"40dp\"
        android:layout_height=\"40dp\" />

    <TextView
        android:id=\"@+id/tv_shop_type_product_linear\"
        android:layout_width=\"match_parent\"
        android:layout_height=\"wrap_content\"
        android:textSize=\"14sp\"
        android:layout_marginLeft=\"10dp\" />

</LinearLayout>

MainActivity

public class MainActivity extends AppCompatActivity implements Iview{

    private PresenterImpl presenter;
    private ShopTypeAdapter shopTypeAdapter;
    private ShopTypeProductAdapter shopTypeProductAdapter;
    private RecyclerView mRecyclerViewShopType, mRecyclerViewShop;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        presenter = new PresenterImpl(this);
        initShopTypeView();
        initShopTypeProductView();
        getTypeData();
    }

    /**
     * 初始化左侧recyclerView,加载左侧adapter
     */
    private void initShopTypeView(){
        mRecyclerViewShop = findViewById(R.id.recyclerview_shop_type);
        LinearLayoutManager linearLayoutManagerLeft = new LinearLayoutManager(this);
        linearLayoutManagerLeft.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerViewShop.setLayoutManager(linearLayoutManagerLeft);
        mRecyclerViewShop.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        shopTypeAdapter = new ShopTypeAdapter(this);
        mRecyclerViewShop.setAdapter(shopTypeAdapter);

        //添加接口回调,用来接收左侧recyclerView的cid
        shopTypeAdapter.set Listener(new ShopTypeAdapter. Listener() {
            @Override
            public void  (int position, String cid) {
                //拿到cid之后,通过接口获得对应的数据,展示在右侧列表中
                getShopData(cid);
                Toast.makeText(MainActivity.this,cid+\"\",Toast.LENGTH_SHORT).show();
            }
        });

    }

    /**
     * 初始化右侧recyclerView,加载右侧adapter
     */
    private void initShopTypeProductView(){
        mRecyclerViewShopType = findViewById(R.id.recyclerview_shop);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerViewShopType.setLayoutManager(linearLayoutManager);
        mRecyclerViewShopType.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        shopTypeProductAdapter = new ShopTypeProductAdapter(this);
        mRecyclerViewShopType.setAdapter(shopTypeProductAdapter);
    }



    /**
     * 获取左侧列表数据
     */
    private void getTypeData(){
        Map<String,String> map = new HashMap<>();
        presenter.requestData(Apis.URL_PRODUCT_GET_CATAGORY,map,ShopTypeBean.class);
    }
    /**
     * 获取右侧列表数据
     * @param cid
     */
    private void getShopData(String cid){
        Map<String, String> map = new HashMap<>();
        map.put(Constants.CID,cid);
        presenter.requestData(Apis.URL_PRODUCT_GET_PRODUCT_CATAGORY,map,ShopTypeProductBean.class);
    }

    @Override
    public void showResponseData(  data) {
        if (data instanceof ShopTypeBean) {
            //获取数据后,展示左侧列表
            ShopTypeBean shopTypeBean = (ShopTypeBean) data;
            shopTypeAdapter.setData(shopTypeBean.getData());
        } else if (data instanceof ShopTypeProductBean) {
            //获取数据后,展示右侧列表
            ShopTypeProductBean shopTypeProductBean = (ShopTypeProductBean) data;
            shopTypeProductAdapter.setData(shopTypeProductBean.getData());

            //将右侧列表滚到顶部
            mRecyclerViewShopType.scrollToPosition(0);
        }
    }

    @Override
    public void showResponseFail(  data) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.onDetach();
    }
}

Apis

public class Apis {

    public static final String URL_PRODUCT_GET_CATAGORY = \"http://www.zhaoapi.cn/product/getCatagory\";
    public static final String URL_PRODUCT_GET_PRODUCT_CATAGORY = \"http://www.zhaoapi.cn/product/getProductCatagory\";
}

Constants

public class Constants {
    public static final String UID= \"uid\";

    public static final String CID= \"cid\";
}

左边的商家Adapter

ShopTypeAdapter

public class ShopTypeAdapter extends RecyclerView.Adapter<ShopTypeAdapter.MyViewHolder> {
    private Context mContext;
    private List<ShopTypeBean.Data> mList = new ArrayList<>();
    public ShopTypeAdapter(Context context) {
        this.mContext = context;
    }

    public void setData(List<ShopTypeBean.Data> list){
        this.mList = list;
        notifyDataSetChanged();
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(mContext, R.layout.shop_type_adapter, null);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
        myViewHolder.mName.setText(mList.get(i).getName());
        myViewHolder.mLinearLayout.set Listener(new View. Listener() {
            @Override
            public void  (View v) {
                if(m Listener != null){
                    m Listener. (i, mList.get(i).getCid());
                }
            }
        });
    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {
        LinearLayout mLinearLayout;
        TextView mName;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            mName = itemView.findViewById(R.id.tv_shop_type_name);
            mLinearLayout = itemView.findViewById(R.id.ll_shop_type);
        }
    }

    private  Listener m Listener;

    public void set Listener( Listener listener) {
        this.m Listener = listener;
    }

    public interface  Listener {
        void  (int position, String cid);
    }
}

右边商品Adapter

ShopTypeProductAdapter

public class ShopTypeProductAdapter extends RecyclerView.Adapter<ShopTypeProductAdapter.MyViewHolder> {
    private Context mContext;
    private List<ShopTypeProductBean.Data> mList = new ArrayList<>();

    public ShopTypeProductAdapter(Context context) {
        this.mContext = context;
    }

    public void setData(List<ShopTypeProductBean.Data> list) {
        this.mList = list;
        notifyDataSetChanged();
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(mContext, R.layout.shop_type_product_adapter, null);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
        myViewHolder.mName.setText(mList.get(i).getName());

        //右侧使用RecyclerView嵌套展示效果(这里根据真正的需求自行修改)
        final ShopTypeProductLinearAdapter shopTypeProductLinearAdapter = new ShopTypeProductLinearAdapter(mContext);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
        myViewHolder.mRecyclerView.setLayoutManager(linearLayoutManager);
        myViewHolder.mRecyclerView.setAdapter(shopTypeProductLinearAdapter);
        myViewHolder.mRecyclerView.addItemDecoration(new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL));

        shopTypeProductLinearAdapter.setData(mList.get(i).getList());
    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView mName;
        RecyclerView mRecyclerView;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            mName = itemView.findViewById(R.id.tv_shop_type_product_name);
            mRecyclerView = itemView.findViewById(R.id.recyclerview_shop_product);
        }
    }
}

ShopTypeProductLinearAdapter

public class ShopTypeProductLinearAdapter extends RecyclerView.Adapter<ShopTypeProductLinearAdapter.MyViewHolder> {

    private Context mContext;
    private List<ShopTypeProductBean.Data.ProductData> mList = new ArrayList<>();

    public ShopTypeProductLinearAdapter(Context context) {
        this.mContext = context;
    }

    public void setData(List<ShopTypeProductBean.Data.ProductData> list){
        this.mList = list;
        notifyDataSetChanged();
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(mContext, R.layout.shop_type_product_linear_adapter, null);
        ShopTypeProductLinearAdapter.MyViewHolder myViewHolder = new ShopTypeProductLinearAdapter.MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
        Glide.with(mContext).load(mList.get(i).getIcon()).into(myViewHolder.mImage);
        myViewHolder.mName.setText(mList.get(i).getName());
    }

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



    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView mName;
        ImageView mImage;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            mName = itemView.findViewById(R.id.tv_shop_type_product_linear);
            mImage = itemView.findViewById(R.id.iv_shop_type_product_linear);
        }
    }
}

Model层接口

MyCallBack

public interface MyCallBack<T> {
    void success(T data);
    void failed(Exception e);
}

Imodel

public interface Imodel {
    void responseData(String url, Map<String,String> params,Class clazz,MyCallBack callBack);
}

ModelImpl实现类

public class ModelImpl implements Imodel{
    @Override
    public void responseData(String url, Map<String, String> params, Class clazz, final MyCallBack callBack) {
        OkHttpUtil.getInstance().doPost(url, params, clazz, new ICallBck() {
            @Override
            public void success(  obj) {
                callBack.success(obj);
            }

            @Override
            public void failed(Exception e) {
                callBack.failed(e);
            }
        });
    }
}

Presenter层接口

Ipresenter

public interface Ipresenter {
    void requestData(String url, Map<String,String> params,Class clazz);
}

PresenterImpl实现类

public class PresenterImpl implements Ipresenter {
    private Iview iview;
    private ModelImpl model;

    public PresenterImpl(Iview iview) {
        this.iview = iview;
        model = new ModelImpl();
    }


    public void onDetach(){
        if (iview != null){
            iview = null;
        }
        if (model != null){
            model = null;
        }
    }

    @Override
    public void requestData(String url, Map<String, String> params, Class clazz) {
        model.responseData(url, params, clazz, new MyCallBack() {
            @Override
            public void success(  data) {
                iview.showResponseData(data);
            }

            @Override
            public void failed(Exception e) {
                iview.showResponseFail(e);
            }
        });
    }
}

View层接口

Iview

public interface Iview<T> {
    void showResponseData(T data);
    void showResponseFail(T data);
}

OkHttp

ICallBack

public interface ICallBck {
    void success(  obj);
    void failed(Exception e);
}

OkHttpUtil

public class OkHttpUtil {
    private static OkHttpUtil instance;
    private OkHttpClient httpClient;
    private Handler handler = new Handler(Looper.myLooper());

    public OkHttpUtil(){
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        httpClient = new OkHttpClient.Builder()
                .connectTimeout(5000, TimeUnit.SECONDS)
                .readTimeout(5000, TimeUnit.SECONDS)
                .writeTimeout(5000, TimeUnit.SECONDS)
                .addInterceptor(interceptor)
                .build();
    }

    public static OkHttpUtil getInstance() {
        if (instance == null){
            synchronized (OkHttpUtil.class){
                instance = new OkHttpUtil();
            }
        }
        return instance;
    }

    public void doPost(String url, Map<String,String> params,final Class clazz,final ICallBck callBck){
        FormBody.Builder builder = new FormBody.Builder();

        for (Map.Entry<String,String> entry : params.entrySet()){
            builder.add(entry.getKey(),entry.getValue());
        }

        RequestBody body = builder.build();

        Request request = new Request.Builder()
                .post(body)
                .url(url)
                .build();

        Call call = httpClient.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBck.failed(e);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response){

                try {
                    String result = response.body().string();
                    Gson gson = new Gson();
                    final   o = gson.fromJson(result, clazz);
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callBck.success(o);
                        }
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        });

    }

}

Bean

ShopTypeBean

public class ShopTypeBean {
    private String msg;
    private String code;
    private List<Data> data;

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

    public void setData(List<Data> data) {
        this.data = 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 class Data{
        private String cid;
        private String name;

        public String getCid() {
            return cid;
        }

        public void setCid(String cid) {
            this.cid = cid;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

 ShopTypeProductBean

public class ShopTypeProductBean {
    private String msg;
    private String code;
    private List<Data> 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 List<Data> getData() {
        return data;
    }

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

    public class Data{
        private String cid;
        private String name;
        private String pcid;

        private List<ProductData> list;

        public String getCid() {
            return cid;
        }

        public void setCid(String cid) {
            this.cid = cid;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getPcid() {
            return pcid;
        }

        public void setPcid(String pcid) {
            this.pcid = pcid;
        }

        public List<ProductData> getList() {
            return list;
        }

        public void setList(List<ProductData> list) {
            this.list = list;
        }

        public class ProductData{
            private String icon;
            private String name;
            private String pcid;
            private String pscid;

            public String getIcon() {
                return icon;
            }

            public void setIcon(String icon) {
                this.icon = icon;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public String getPcid() {
                return pcid;
            }

            public void setPcid(String pcid) {
                this.pcid = pcid;
            }

            public String getPscid() {
                return pscid;
            }

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

权限

<uses-permission android:name=\"android.permission.INTERNET\"></uses-permission>

 

 

 

收藏 打印