前言

近期在做一个商城类项目,需要实现对一个订单里的多个商品分别评价的功能(类似于淘宝的评价),花费了一点时间把效果做了出来,并在这里分享出来也权当做了记录,图个日后使用方便。

效果图

设计原理

设计原理

因为每个订单可能有多个商品,所以我直接用一个RecyclerView来展示多个商品,这里主要的难点在于Item的布局。

设计原理

EvaluationView和EvaluationChoiceImageView是两个自定义View,分别用来选择评价类型和选择评价图片的。
EvaluationView内部原理比较简单主要是在LinearLayout内部嵌套了EvaluationItem。

EvaluationChoiceImageView的内部原理主要是使用FlowLayout(流式布局),然后将选择的图片添加到FlowLayout中,FlowLayout的好处就是它能够实现自动换行。

另外EvaluationChoiceImageView可以通过添加监听事件来进行相应的操作

//当点击选择图片的时候(这里一般通过调用addImage()方法进行添加图片操作)
itemRegularevaluationEvaluationchoiceimageview.setOnClickAddImageListener(new EvaluationChoiceImageView.OnClickAddImageListener() {@Overridepublic void onClickAddImage() {itemRegularevaluationEvaluationchoiceimageview.addImage("图片的路径地址");}});//当点击右上方叉号的时候触发此事件(一般用来删除数据)itemRegularevaluationEvaluationchoiceimageview.setOnClickDeleteImageListener(new EvaluationChoiceImageView.OnClickDeleteImageListener() {@Overridepublic void onClickDeleteImage(int position) {//position是删除图片的位置}});//当点击图片的时候触发此事件(一般用来查看图片)itemRegularevaluationEvaluationchoiceimageview.setOnClickImageListener(new EvaluationChoiceImageView.OnClickImageListener() {@Overridepublic void onClickImage(int position) {//position是查看图片的位置}});

代码解释

这里首先是创建一个EvaluationBean用来存放每个商品需要提交的信息。

public class EvaluationBean {//这里还可以加上其他的信息比如商品的Idprivate int evaluatinType=1;//默认好评private String evaluationContent;//评价内容private List<File> evaluationImages;//评价图片集合public EvaluationBean() {if(evaluationImages==null){evaluationImages=new ArrayList<>();}}public int getEvaluatinType() {return evaluatinType;}public void setEvaluatinType(int evaluatinType) {this.evaluatinType = evaluatinType;}public String getEvaluationContent() {return evaluationContent;}public void setEvaluationContent(String evaluationContent) {this.evaluationContent = evaluationContent;}public List<File> getEvaluationImages() {return evaluationImages;}public void setEvaluationImages(List<File> evaluationImages) {this.evaluationImages = evaluationImages;}@Overridepublic String toString() {return "EvaluationBean{" +"evaluatinType=" + evaluatinType +", evaluationContent='" + evaluationContent + '\'' +", evaluationImages=" + evaluationImages +'}';}
}

然后再建立一个存放EvaluationBean的集合,集合的大小与订单中商品的数量相同。

private void initDatas() {//        添加测试数据(简单的添加图片地址模拟订单)if(mTempDatas==null){mTempDatas=new ArrayList<>();for (int x=0;x<4;x++){mTempDatas.add(""+x);}}if(evaluationBeans==null){evaluationBeans=new ArrayList<>();}for(int x=0;x<mTempDatas.size();x++){EvaluationBean evaluationBean=new EvaluationBean();evaluationBean.setEvaluatinType(1);evaluationBeans.add(evaluationBean);}}

最后将选择好的数据通过遍历集合的方式传到服务器。

for (EvaluationBean evaluationBean:evaluationBeans){Log.e("测试",evaluationBean.toString());HashMap<String,String> parama=new HashMap<>();parama.put("evaluationType",evaluationBean.getEvaluatinType()+"");parama.put("evaluationContent",evaluationBean.getEvaluationContent());HashMap<String, RequestBody> pics=new HashMap<>();for (File file:evaluationBean.getEvaluationImages()){pics.put(file.getName(),RequestBody.create(MediaType.parse("image/*"), file));}RetrofitUtils.getInstance().getApiServier(Api.class).submitEvaluation(parama,pics).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<ResultBean>() {@Overridepublic void accept(ResultBean resultBean) throws Exception {}}, new Consumer<Throwable>() {@Overridepublic void accept(Throwable throwable) throws Exception {}});}

大体流程就是这样,更加详细的实现可以看一下我的代码(GitHub传送门)

个人技术博客:https://myml666.github.io/

Android 类似淘宝的多商品订单评价相关推荐

  1. 淘宝/天猫官方商品/订单订单API接口

    淘宝/天猫官方商品/订单订单API接口 测试地址:点击注册 商品接口列表 产品管理包 Taobao.product.get 获取一个产品的信息 官方文档 Taobao.products.search ...

  2. 淘宝API 获取—商品订单详情

    淘宝API_buyer_order_detail - 获取-商品订单详情 以下是获得淘宝商品订单详情 API 返回值说明.简单调用示例. 需要更多了解和测试调用请移步 http://console.o ...

  3. Android 仿淘宝京东等我的订单界面及任意列表拓展

    概述 目前像淘宝及展示列表等都有多个item展示的需求,可能大多数如果没做过,第一眼就是ListView去嵌套ListView,虽然这样是可以完成,但是这样做会导致手机过度绘制,为什么呢?因为当一个I ...

  4. Android 类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现

    最近跳槽去新公司,接受的第一个任务是在 一个电商模块的搜索功能以及搜索历史记录的实现. 需求和淘宝等电商的功能大体差不多,最上面一个搜索框,下面显示搜索历史记录.在EditText里输入要搜索的关键字 ...

  5. android 仿淘宝、京东商品详情页 向上拖动查看图文详情控件

    一.淘宝商品详情页效果 先看一下淘宝详情页的效果 我们的效果 二.实现思路 使用两个scrollView,两个scrollView 竖直排列,通过自定义viewGroup来控制两个scrollView ...

  6. 集成网易云信实现自定义消息(类似淘宝聊天发送商品信息)

    上篇文章,我们整理了网易云信的快速集成过程.有兴趣的小伙伴可以移步到:ios集成网易云信IM功能遇到的坑 .简单的实现一对一聊天界面或者查看最近联系人列表.我们只需直接调用NIMKit里面的NIMSe ...

  7. Android仿淘宝京东商品规格参数颜色筛选

    Android 选择商品属性sku 最近项目中使用SKU属性查询,类似淘宝京东商品的选择,在网上查询了弄了几个源码看看,发现还是实现不了多属性选择问题,再原基础上改动相当费事,所以想干脆自己处理这个问 ...

  8. Android App打开淘宝(店铺或商品)

    目录 ​准备工作 逻辑 具体实现 在官方淘宝开放平台查询打开淘宝APP文档,未果.各处查找资料,其中参考了<应用内打开京东.淘宝指定商品或店铺页面>:发现未安装淘宝app时在WebView ...

  9. VUE类似淘宝选择商品多规格(库存判断)

    1.组件效果展示 也可访问链接查看网页效果... 后面又用uni-app写过一次,比这次稍微清晰一些 uni-app类似淘宝选择商品多规格(库存判断) 瞎封装组件系列: VUE简单提示框 VUE树形图 ...

最新文章

  1. python and or 与 | 的比较
  2. 小型云台用的是什么电机_盘一下目前国内主流的电动汽车都用什么电机
  3. wordpress插入腾讯视频的方法
  4. 修改centos7容器的时间和宿主机时间一致
  5. 长春大学计算机学院招生简章,长春大学招生简章
  6. sysctl修改内核参数
  7. 此电脑创建桌面快捷方式
  8. 109.数组中的最长山脉
  9. Windows系统跨硬盘合并分区
  10. 用生成对抗网络给雪人上色,探索人工智能时代的美学
  11. Codeforces 833D Red-Black Cobweb 边分治
  12. 高级程序员到底长什么样子?
  13. Scratch之制作幸运抽奖机
  14. GBASE 8A v953报错集锦56--Hadoop 加载失败问题
  15. 中国地区三级联动下拉菜单
  16. 数字信号处理随堂笔记(2)ᝰ离散时间信号与系统的频域分析
  17. 一文看尽深度学习中的生成对抗(GAN)网络
  18. (2011-12-11 旧博文搬运)away3d太阳系DEMO
  19. 10个免费的HTML在线编辑工具
  20. 第十四届蓝桥杯三月真题刷题训练——第 19 天

热门文章

  1. 脉冲神经网络大致流程
  2. 7.2 一次产品异常复位引发的质量提升经历
  3. WS小世界网络构建实验(Matlab版)
  4. 【Koltin Flow(二)】Flow操作符之末端操作符
  5. Okhttp之Https
  6. C# 串口+示波+数据存储+截图
  7. C语言基础——统计由键盘输入的一行字符中数字、字母与其他的个数
  8. CSS五种方式实现 Footer 置底
  9. Python3 利用Virustotal API 获取json格式的分析报告
  10. jpg转换为eps_在线JPG到EPS转换器