1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Android仿淘寶商品訂單評價功能

        共 4970字,需瀏覽 10分鐘

         ·

        2021-07-12 14:54

        前言

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


        設(shè)計原理


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



        EvaluationView和EvaluationChoiceImageView是兩個自定義View,
        分別用來選擇評價類型和選擇評價圖片的。

        EvaluationView內(nèi)部原理比較簡單主要是
        在LinearLayout內(nèi)部嵌套了EvaluationItem。



        EvaluationChoiceImageView的內(nèi)部原理主要是使用FlowLayout(流式布局),然后將選擇的圖片添加到FlowLayout中,F(xiàn)lowLayout的好處就是它能夠?qū)崿F(xiàn)自動換行。



        另外EvaluationChoiceImageView可以通過添加監(jiān)聽事件來進(jìn)行相應(yīng)的操作

        //當(dāng)點擊選擇圖片的時候(這里一般通過調(diào)用addImage()方法進(jìn)行添加圖片操作)itemRegularevaluationEvaluationchoiceimageview.setOnClickAddImageListener(new EvaluationChoiceImageView.OnClickAddImageListener() {                    @Override                    public void onClickAddImage() {                        itemRegularevaluationEvaluationchoiceimageview.addImage("圖片的路徑地址");                    }                });                //當(dāng)點擊右上方叉號的時候觸發(fā)此事件(一般用來刪除數(shù)據(jù))                itemRegularevaluationEvaluationchoiceimageview.setOnClickDeleteImageListener(new EvaluationChoiceImageView.OnClickDeleteImageListener() {                    @Override                    public void onClickDeleteImage(int position) {                       //position是刪除圖片的位置                    }                });                //當(dāng)點擊圖片的時候觸發(fā)此事件(一般用來查看圖片)                itemRegularevaluationEvaluationchoiceimageview.setOnClickImageListener(new EvaluationChoiceImageView.OnClickImageListener() {                    @Override                    public void onClickImage(int position) {                        //position是查看圖片的位置                    }                });


        代碼解釋

        這里首先是創(chuàng)建一個EvaluationBean用來存放每個商品需要提交的信息。

        public class EvaluationBean {    //這里還可以加上其他的信息比如商品的Id    private 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; }
        @Override public 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>() {                                @Override                                public void accept(ResultBean resultBean) throws Exception {
        } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception {
        } }); }


        源碼地址:

        https://github.com/myml666/EvaluationDemo


        到這里就結(jié)束啦。
        瀏覽 112
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲免费电影网 | 国产精品乱码一区二区三区 | 成人自拍偷拍视频在线 | 伊人五月天 | 久久久久久aaaabbbb | 日本68xxxxxxxxx21 | 国产亚洲欧美精品久久久www | 日韩人妻一区二区三区蜜桃视频密 | 中文字幕毛片 | 国产chinese男男gaygay视频网站 |