ClassifyDetailAdapter.java 18.9 KB
package com.naji.xiaotao.cookbook.adapter;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cookbook.bean.CookbookDetailEntity;
import com.naji.xiaotao.cookbook.bean.ReduceBean;
import com.naji.xiaotao.cookbook.bean.ResultEntity;
import com.naji.xiaotao.cookbook.dialog.ReduceFragmentDialog;
import com.naji.xiaotao.cookbook.dialog.SelectFragmentDialog;
import com.naji.xiaotao.cookbook.service.CookbookApiService;
import com.naji.xiaotao.cookbook.viewholder.RvHolder;
import com.naji.xiaotao.cookbook.listener.RvListener;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.tangshi.entity.OrderEntity;
import com.othershe.library.NiceImageView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.bus.RxBus;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;


public class ClassifyDetailAdapter extends RvAdapter<CookbookDetailEntity> {

    private Context context;
   private String orderid;
   private String fromSource;
   private boolean isWaitingSure;

    public ClassifyDetailAdapter(Context context, List<CookbookDetailEntity> list, String orderid,String fromSource,boolean isWaitingSure,RvListener listener) {
        super(context, list, listener);
        this.context=context;
        this.orderid=orderid;
        this.fromSource=fromSource;
        this.isWaitingSure=isWaitingSure;
    }


    @Override
    protected int getLayoutId(int viewType) {
        return viewType == 0 ? R.layout.cookbook_item_title : R.layout.cookbook_item__detail;
    }

    @Override
    public int getItemViewType(int position) {
        return list.get(position).isTitle() ? 0 : 1;
    }

    @Override
    protected RvHolder getHolder(View view, int viewType) {
        return new ClassifyHolder(view, viewType, listener);
    }

    public class ClassifyHolder extends RvHolder<CookbookDetailEntity> {
        TextView tvTitle;//标题栏标题
        TextView tvCook;//菜品名称
        ImageView noMoreImg;//卖光了
        TextView tvYidian;//点过标志
        LinearLayout tagLayout;//标签容器
        TextView tvPrice;//价格
        TextView lastNum;//剩余菜品数量
        ImageView jianImg;//减图标
        TextView  havingNum;//已点数量
        ImageView addImg;//加图标
        NiceImageView cookImg;//菜品图标

        public ClassifyHolder(View itemView, int type, RvListener listener) {
            super(itemView, type, listener);
            switch (type) {
                case 0:
                    tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
                    break;
                case 1:
                    tvCook= (TextView) itemView.findViewById(R.id.tv_cook);
                    noMoreImg=itemView.findViewById(R.id.nomore);
                    tvYidian=itemView.findViewById(R.id.yidian);
                    tagLayout=itemView.findViewById(R.id.tag_layout);
                    tvPrice=itemView.findViewById(R.id.price);
                    lastNum=itemView.findViewById(R.id.lastnum);
                    jianImg=itemView.findViewById(R.id.jianImg);
                    havingNum=itemView.findViewById(R.id.havingnum);
                    addImg=itemView.findViewById(R.id.addImg);
                    cookImg=itemView.findViewById(R.id.cook_img);
                    break;
            }

        }

        @Override
        public void bindHolder(final CookbookDetailEntity sortBean, final int position) {
            int itemViewType = ClassifyDetailAdapter.this.getItemViewType(position);
            switch (itemViewType) {
                case 0:
                    tvTitle.setText(sortBean.getTitleName());
                    break;
                case 1:
                    tvCook.setText(sortBean.getName());
                    tvPrice.setText(sortBean.getPrice()+"元/"+sortBean.getUnit());
                    havingNum.setText(sortBean.getNum()+"");
                    if(!TextUtils.isEmpty(sortBean.getClear_num())&&Integer.parseInt(sortBean.getClear_num())<=0){
                        lastNum.setVisibility(View.GONE);
                        noMoreImg.setVisibility(View.VISIBLE);
                        addImg.setVisibility(View.GONE);
                    }else{
                        if(!TextUtils.isEmpty(sortBean.getClear_num())&&Integer.parseInt(sortBean.getClear_num())<=10){
                            lastNum.setVisibility(View.VISIBLE);
                            lastNum.setText("剩余"+sortBean.getClear_num()+"份");
                        }else{
                            lastNum.setVisibility(View.GONE);
                            lastNum.setText("剩余"+sortBean.getClear_num()+"份");
                        }
                        noMoreImg.setVisibility(View.INVISIBLE);
                        addImg.setVisibility(View.VISIBLE);
                    }
                    if(sortBean.getNum()>0){
                        jianImg.setVisibility(View.VISIBLE);
                        havingNum.setVisibility(View.VISIBLE);
                    }else{
                        jianImg.setVisibility(View.INVISIBLE);
                        havingNum.setVisibility(View.INVISIBLE);
                    }
                    if(!TextUtils.isEmpty(sortBean.getImage())){
                        //使用Glide框架加载图片
                        Glide.with(cookImg.getContext())
                                .load(sortBean.getImage())
                                .apply(new RequestOptions().placeholder(null))
                                .into(cookImg);
                        cookImg.setVisibility(View.VISIBLE);
                    }else{
                        cookImg.setVisibility(View.GONE);
                    }
                    tagLayout.removeAllViews();
                    if(sortBean.getLabelList()!=null&&sortBean.getLabelList().size()>0){
                        LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.MATCH_PARENT);
                        params.rightMargin= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,10,mContext.getResources().getDisplayMetrics());
                        for(int i=0;i<sortBean.getLabelList().size();i++){
                            ImageView imageView=new ImageView(mContext);
                            Glide.with(imageView.getContext())
                                    .load(sortBean.getLabelList().get(i))
                                    .apply(new RequestOptions().placeholder(null))
                                    .into(imageView);
                            tagLayout.addView(imageView,params);
                        }
                    }
                    addImg.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            if(!TextUtils.isEmpty(list.get(position).getClear_num())&&list.get(position).getNum()==Integer.parseInt(list.get(position).getClear_num())){
                                ToastUtils.showShort("菜品沽清不足");
                                return;
                            }
                            if(sortBean.getPractice().size()>0||sortBean.getSpec().size()>0){//有菜品规格或者做法
                                SelectFragmentDialog dialog=new SelectFragmentDialog();
                                dialog.setOnSureClickListener(new SelectFragmentDialog.onSureClickListener() {
                                    @Override
                                    public void onSureClick(String specid, String practiceid,String spec,String practice,String price) {
                                        addCookToCart(position,specid,practiceid,spec,practice,price,jianImg,havingNum);
                                    }
                                });
                                Bundle bundle=new Bundle();
                                bundle.putSerializable("cook",list.get(position));
                                dialog.setArguments(bundle);
                                dialog.show(((AppCompatActivity)context).getSupportFragmentManager(),"selectFragmentDialog");
                                return;
                            }
                            addCookToCart(position,"","","","",list.get(position).getPrice(),jianImg,havingNum);

                        }
                    });
                    jianImg.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            if(sortBean.getPractice().size()>0||sortBean.getSpec().size()>0){//有菜品规格或做法
                                //获取一点菜品规则做法列表
                                Map<String,String> params=new HashMap<>();
                                params.put("sellerid",SPUtils.getInstance("user_info").getString("sellerid"));
                                params.put("orderid",orderid);
                                params.put("cookbookid",sortBean.getId());
                                RetrofitClient.getInstance().create(CookbookApiService.class)
                                        .getCookbookSelBySpecsId(params)
                                        .compose(RxUtils.schedulersTransformer())
                                        .compose(RxUtils.exceptionTransformer())
                                        .doOnSubscribe(new Consumer<Disposable>() {
                                            @Override
                                            public void accept(Disposable disposable) throws Exception {

                                            }
                                        })
                                        .subscribe(new Consumer<BaseResponse<List<List<ReduceBean>>>>() {
                                            @Override
                                            public void accept(BaseResponse<List<List<ReduceBean>>> listBaseResponse) throws Exception {
                                                if(listBaseResponse.getRet()==200){
                                                    final ReduceFragmentDialog dialog=new ReduceFragmentDialog();
                                                    dialog.setListener(new ReduceFragmentDialog.ReduceListener() {
                                                        @Override
                                                        public void onAddSuccess(int position,ReduceBean bean) {
                                                            list.get(position).setNum(list.get(position).getNum()+1);
                                                            havingNum.setText(list.get(position).getNum()+"");
                                                        }

                                                        @Override
                                                        public void onReduceSuccess(int position,ReduceBean bean) {
                                                            list.get(position).setNum(list.get(position).getNum()-1);
                                                            havingNum.setText(list.get(position).getNum()+"");
                                                            if(list.get(position).getNum()==0){
                                                                jianImg.setVisibility(View.INVISIBLE);
                                                                havingNum.setVisibility(View.INVISIBLE);
                                                                dialog.dismiss();
                                                            }
                                                        }
                                                    });
                                                    Bundle bundle=new Bundle();
                                                    bundle.putInt("position",position);
                                                    bundle.putString("cookname",sortBean.getName());
                                                    bundle.putString("fromSource",fromSource);
                                                    bundle.putString("clear_num",sortBean.getClear_num());
                                                    bundle.putParcelableArrayList("list", (ArrayList<? extends Parcelable>) listBaseResponse.getData().get(0));
                                                    dialog.setArguments(bundle);
                                                    dialog.show(((AppCompatActivity)context).getSupportFragmentManager(),"selectFragmentDialog");
                                                }else{
                                                    ToastUtils.showShort(listBaseResponse.getMsg());
                                                }
                                            }
                                        }, new Consumer<ResponseThrowable>() {
                                            @Override
                                            public void accept(ResponseThrowable throwable) throws Exception {
                                                throwable.printStackTrace();
                                                ToastUtils.showShort(throwable.msg);
                                            }
                                        });
                                return;
                            }
                            reduceCookFromCart(position,"","",jianImg,havingNum);
                        }
                    });
                    break;
            }
        }
    }

    //添加菜品到购物车
    private void addCookToCart(final int position, final String specid, final String practiceid, final String spec, final String practice, final String price,final ImageView reduceImg, final TextView havingNum){
        Map<String,String> params=new HashMap<>();
        params.put("orderid",orderid);
        params.put("openid", SPUtils.getInstance("user_info").getString("openid"));
        params.put("cookbookid",list.get(position).getId());
        params.put("identity","2");
        params.put("price",price);
        if(!TextUtils.isEmpty(specid)){
            params.put("specid",specid);
        }
        if(!TextUtils.isEmpty(practiceid)){
            params.put("practiceid",practiceid);
        }
        if(!TextUtils.isEmpty(fromSource)||isWaitingSure){
            params.put("fromSoucre","1");
        }
        RetrofitClient.getInstance().create(CookbookApiService.class)
                .addCookToCart(params)
                .compose(RxUtils.schedulersTransformer())
                .compose(RxUtils.exceptionTransformer())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {

                    }
                })
                .subscribe(new Consumer<BaseResponse<List<ResultEntity>>>() {
                    @Override
                    public void accept(BaseResponse<List<ResultEntity>> baseResponse) throws Exception {
                        if(baseResponse.getRet()==200){
                            list.get(position).setNum(list.get(position).getNum()+1);
                            havingNum.setText(list.get(position).getNum()+"");
                            reduceImg.setVisibility(View.VISIBLE);
                            havingNum.setVisibility(View.VISIBLE);
                            //通知CookbookMainActivity改变购物车数量
                            RxBus.getDefault().post(1);
                        }else{
                            ToastUtils.showShort(baseResponse.getMsg());
                        }
                    }
                }, new Consumer<ResponseThrowable>() {
                    @Override
                    public void accept(ResponseThrowable throwable) throws Exception {
                        ToastUtils.showShort(throwable.msg);
                        throwable.printStackTrace();
                    }
                });
    }
    //删减菜品从购物车
    private void reduceCookFromCart(final int position,final String specid,final String practiceid,final ImageView reduceImg, final TextView havingNum){
        Map<String,String> params=new HashMap<>();
        params.put("orderid",orderid);
        params.put("cookbookid",list.get(position).getId());
        params.put("identity","2");
        if(!TextUtils.isEmpty(specid)){
            params.put("specid",specid);
        }
        if(!TextUtils.isEmpty(practiceid)){
            params.put("practiceid",practiceid);
        }
        if(!TextUtils.isEmpty(fromSource)||isWaitingSure){
            params.put("fromSoucre","1");
        }
        RetrofitClient.getInstance().create(CookbookApiService.class)
                .reduceCookFromCart(params)
                .compose(RxUtils.schedulersTransformer())
                .compose(RxUtils.exceptionTransformer())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {

                    }
                })
                .subscribe(new Consumer<BaseResponse<List<ResultEntity>>>() {
                    @Override
                    public void accept(BaseResponse<List<ResultEntity>> baseResponse) throws Exception {
                        if(baseResponse.getRet()==200){
                            list.get(position).setNum(list.get(position).getNum()-1);
                            havingNum.setText(list.get(position).getNum()+"");
                            if(list.get(position).getNum()<=0){
                                reduceImg.setVisibility(View.INVISIBLE);
                                havingNum.setVisibility(View.INVISIBLE);
                            }
                            //通知CookbookMainActivity改变购物车数量
                            RxBus.getDefault().post(-1);
                        }else{
                            ToastUtils.showShort(baseResponse.getMsg());
                        }
                    }
                }, new Consumer<ResponseThrowable>() {
                    @Override
                    public void accept(ResponseThrowable throwable) throws Exception {
                        ToastUtils.showShort(throwable.msg);
                        throwable.printStackTrace();
                    }
                });
    }

}