Android仿淘寶商品訂單評價功能
前言
近期在做一個商城類項目,需要實現(xiàn)對一個訂單里的多個商品分別評價的功能(類似于淘寶的評價),花費(fèi)了一點時間把效果做了出來,并在這里分享出來也權(quán)當(dāng)做了記錄,圖個日后使用方便。

設(shè)計原理

因為每個訂單可能有多個商品,所以我直接用一個RecyclerView來展示多個商品,這里主要的難點在于Item的布局。

EvaluationView內(nèi)部原理比較簡單主要是


另外EvaluationChoiceImageView可以通過添加監(jiān)聽事件來進(jìn)行相應(yīng)的操作
//當(dāng)點擊選擇圖片的時候(這里一般通過調(diào)用addImage()方法進(jìn)行添加圖片操作)itemRegularevaluationEvaluationchoiceimageview.setOnClickAddImageListener(new EvaluationChoiceImageView.OnClickAddImageListener() {@Overridepublic void onClickAddImage() {itemRegularevaluationEvaluationchoiceimageview.addImage("圖片的路徑地址");}});//當(dāng)點擊右上方叉號的時候觸發(fā)此事件(一般用來刪除數(shù)據(jù))itemRegularevaluationEvaluationchoiceimageview.setOnClickDeleteImageListener(new EvaluationChoiceImageView.OnClickDeleteImageListener() {@Overridepublic void onClickDeleteImage(int position) {//position是刪除圖片的位置}});//當(dāng)點擊圖片的時候觸發(fā)此事件(一般用來查看圖片)itemRegularevaluationEvaluationchoiceimageview.setOnClickImageListener(new EvaluationChoiceImageView.OnClickImageListener() {@Overridepublic void onClickImage(int position) {//position是查看圖片的位置}});
代碼解釋
這里首先是創(chuàng)建一個EvaluationBean用來存放每個商品需要提交的信息。
public class EvaluationBean {//這里還可以加上其他的信息比如商品的Idprivate int evaluatinType=1;//默認(rèn)好評private String evaluationContent;//評價內(nèi)容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的集合,
集合的大小與訂單中商品的數(shù)量相同。
private void initDatas() {// 添加測試數(shù)據(jù)(簡單的添加圖片地址模擬訂單)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);}}
最后將選擇好的數(shù)據(jù)通過遍歷集合的方式傳到服務(wù)器。
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 {}});}
源碼地址:
https://github.com/myml666/EvaluationDemo
評論
圖片
表情
