主页面布局
<? 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>
继续阅读与本文标签相同的文章
上一篇 :
《算法技术手册》一3.1 算法模板的格式
下一篇 :
常见排序算法7——归并排序
-
免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式
2026-05-18栏目: 教程
-
BAT技术面dubbo还能这么问?
2026-05-18栏目: 教程
-
yaml转json,json转yaml,使用js-yaml实现yaml和json转换
2026-05-18栏目: 教程
-
PostgreSQL系统隐藏字段
2026-05-18栏目: 教程
-
7月24日阿里云峰会.上海 开发者大会回看
2026-05-18栏目: 教程
