MVP购物车

本文详细介绍了如何运用Retrofit构建一个MVP架构的购物车应用,包括Model层的数据交互,自定义View的实现,子适配器和父适配器的设计,以及在MainActivity和整个App中的应用,同时提及了二维码功能的集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RetrofisHttps

package com.bawei.jiejiaqi0404.views;

import com.bawei.jiejiaqi0404.api.Api;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofisHttps {
    private static RetrofisHttps retrofisHttps;
    private final OkHttpClient okHttpClient;
    private final Retrofit build;

    public static RetrofisHttps getInance(){
        if (retrofisHttps == null){
            synchronized (RetrofisHttps.class){
                if (retrofisHttps == null){
                   retrofisHttps = new RetrofisHttps();
                }
            }
        }
        return retrofisHttps;
    }

    private RetrofisHttps(){
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(httpLoggingInterceptor)
                .addNetworkInterceptor(httpLoggingInterceptor)
                .build();
        build = new Retrofit.Builder()
                .baseUrl(Api.Api)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build();
    }
    public<T> T create(Class<T> tClass){
        return build.create(tClass);
    }
}

Modle

package com.bawei.jiejiaqi0404.modle;

import com.bawei.jiejiaqi0404.api.ApiService;
import com.bawei.jiejiaqi0404.bean.Bean;
import com.bawei.jiejiaqi0404.callback.CallBack;
import com.bawei.jiejiaqi0404.contract.Contract;
import com.bawei.jiejiaqi0404.views.RetrofisHttps;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;

public class Modle implements Contract.IModle{

    private ApiService apiService;

    @Override
    public void Modle(final CallBack callBack) {
        apiService = RetrofisHttps.getInance().create(ApiService.class);
        apiService.fa()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new DisposableObserver<Bean>() {
                    @Override
                    public void onNext(Bean value) {
                       callBack.onSuccess(value);
                    }

                    @Override
                    public void onError(Throwable e) {
                       System.out.println("报错了66666666666666666666666666666666666666666666"+e);
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

自定义View

package com.bawei.jiejiaqi0404.view;

import android.content.Context;
import android.telecom.Call;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bawei.jiejiaqi0404.R;

public class View extends LinearLayout{

    public android.view.View view;
    public Button jianButton,jiaButton;
    public TextView shulTextView;
    private int s;

    public View(Context context) {
        super(context);
    }

    public View(Context context, AttributeSet attrs) {
        super(context, attrs);
        view = LayoutInflater.from(context).inflate(R.layout.name2, this);
        jianButton = view.findViewById(R.id.jianButton);
        jiaButton = view.findViewById(R.id.jiaButton);
        shulTextView = view.findViewById(R.id.shulTextView);
        s = Integer.parseInt(shulTextView.getText().toString());
        jiaButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(android.view.View v) {
                s = s + 1;
                shulTextView.setText(String.valueOf(s));
                CallBackListener.jia(s);
            }
        });
        jianButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(android.view.View v) {
                s = s - 1;
                if (s < 1){
                    s = 1;
                    shulTextView.setText(String.valueOf(s));
                }
                shulTextView.setText(String.valueOf(s));
                CallBackListener.jian(s);
            }
        });
    }

    public View(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    CallBackListener CallBackListener;

    public void setCallBackListener(View.CallBackListener CallBackListener) {
        this.CallBackListener = CallBackListener;
    }

    public interface CallBackListener{
        public void jia(int s);
        public void jian(int s);
    }
}

子适配器

package com.bawei.jiejiaqi0404.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import com.bawei.jiejiaqi0404.R;
import com.bawei.jiejiaqi0404.bean.Bean;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;

public class ZAdapter extends RecyclerView.Adapter<ZAdapter.ViewHolderz>{
    private Context context;
    private List<Bean.DataBean.ListBean> list;

    public ZAdapter(Context context, List<Bean.DataBean.ListBean> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public ZAdapter.ViewHolderz onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.name1, viewGroup, false);
        ViewHolderz viewHolderz = new ViewHolderz(view);
        return viewHolderz;
    }

    @Override
    public void onBindViewHolder(@NonNull ZAdapter.ViewHolderz viewHolderz, final int i) {
       viewHolderz.simpleDraweeView.setImageURI(list.get(i).getDetailUrl());
       viewHolderz.zTextView.setText(list.get(i).getTitle());
       viewHolderz.zTextView1.setText("优惠价: ¥"+list.get(i).getPrice()+"");
       viewHolderz.zdjView.shulTextView.setText(list.get(i).getDefalutNumber()+"");

       //避免焦点
        viewHolderz.zCheckBox.setOnCheckedChangeListener(null);
        //获取现有的状态值
        viewHolderz.zCheckBox.setChecked(list.get(i).isCheck());
        viewHolderz.zCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                list.get(i).setCheck(isChecked);
                ShopCallBackListener.Twocall();
            }
        });
        viewHolderz.zdjView.setCallBackListener(new com.bawei.jiejiaqi0404.view.View.CallBackListener() {
            @Override
            public void jia(int s) {
                list.get(i).setDefalutNumber(s);
                ShopCallBackListener.Twocall();
            }

            @Override
            public void jian(int s) {
                list.get(i).setDefalutNumber(s);
                ShopCallBackListener.Twocall();
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class ViewHolderz extends RecyclerView.ViewHolder {
        private CheckBox zCheckBox;
        private SimpleDraweeView simpleDraweeView;
        private TextView zTextView,zTextView1;
        private final com.bawei.jiejiaqi0404.view.View zdjView;

        public ViewHolderz(@NonNull View itemView) {
            super(itemView);
            zCheckBox = itemView.findViewById(R.id.zCheckBox);
            zTextView = itemView.findViewById(R.id.zTextView);
            zTextView1 = itemView.findViewById(R.id.zTextView1);
            simpleDraweeView = itemView.findViewById(R.id.simpleDraweeView);
            zdjView = itemView.findViewById(R.id.zdjView);
        }
    }
     MainCallBackListener ShopCallBackListener;

    public void setShopCallBackListener(MainCallBackListener ShopCallBackListener) {
      this.ShopCallBackListener = ShopCallBackListener;
    }

    public interface  MainCallBackListener{
        public void  Twocall();
    }
}

父适配器

package com.bawei.jiejiaqi0404.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import com.bawei.jiejiaqi0404.R;
import com.bawei.jiejiaqi0404.bean.Bean;

import java.util.List;

public class FAdapter extends RecyclerView.Adapter<FAdapter.ViewHolder> {
    private Context context;
    private List<Bean.DataBean> data;
    private ZAdapter zAdapter;
    private List<Bean.DataBean.ListBean> list;

    public FAdapter(Context context, List<Bean.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public FAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.name, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final FAdapter.ViewHolder viewHolder, final int i) {
      viewHolder.textView.setText(data.get(i).getSellerName());
      viewHolder.zRecyclerView.setLayoutManager(new LinearLayoutManager(context));
      list = data.get(i).getList();
      zAdapter = new ZAdapter(context,list);
      viewHolder.zRecyclerView.setAdapter(zAdapter);
      //焦点冲突
      viewHolder.checkBox.setOnCheckedChangeListener(null);
      //获取现有的状态值
      viewHolder.checkBox.setChecked(data.get(i).isCheckr());
      //第二个适配器的接口回调
      zAdapter.setShopCallBackListener(new ZAdapter.MainCallBackListener() {
          @Override
          public void Twocall() {
              boolean User = true;
              for (int j = 0; j < data.get(i).getList().size(); j++){
                 User = User&data.get(i).getList().get(j).isCheck();
              }
              viewHolder.checkBox.setChecked(User);
              zAdapter.notifyDataSetChanged();
              mShopCallBackListener.OneCall();
          }
      });
      viewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              for (int j = 0; j < data.get(i).getList().size(); j++){
                     data.get(i).getList().get(j).setCheck(viewHolder.checkBox.isChecked());
              }
              data.get(i).setCheckr(viewHolder.checkBox.isChecked());
              notifyDataSetChanged();
              mShopCallBackListener.OneCall();
          }
      });
      zAdapter.notifyDataSetChanged();
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private CheckBox checkBox;
        private TextView textView;
        private RecyclerView zRecyclerView;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            checkBox = itemView.findViewById(R.id.checkBox);
            textView = itemView.findViewById(R.id.textView);
            zRecyclerView = itemView.findViewById(R.id.zRecyclerView);
        }
    }
    //定义接口
    private ShopCallBackListener mShopCallBackListener;

    public void setmShopCallBackListener(ShopCallBackListener mShopCallBackListener) {
        this.mShopCallBackListener = mShopCallBackListener;
    }

    public interface ShopCallBackListener {
        public void OneCall();
    }
}

MainActivity

package com.bawei.jiejiaqi0404;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import com.bawei.jiejiaqi0404.adapter.FAdapter;
import com.bawei.jiejiaqi0404.bean.Bean;
import com.bawei.jiejiaqi0404.contract.Contract;
import com.bawei.jiejiaqi0404.presenter.Presenter;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity implements Contract.IView {

    @BindView(R.id.recyclerView)
    RecyclerView recyclerView;
    @BindView(R.id.qxCheckBox)
    CheckBox qxCheckBox;
    @BindView(R.id.zjTextView)
    TextView zjTextView;
    @BindView(R.id.qjsButton)
    Button qjsButton;
    private Presenter presenter;
    private Bean bean;
    private FAdapter fAdapter;
    private List<Bean.DataBean> data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        presenter = new Presenter(this);
        presenter.Presenter();
        qjsButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    public void onSuccess(Object retuil) {
        bean = (Bean) retuil;
        data = bean.getData();
        fAdapter = new FAdapter(this, data);
        recyclerView.setAdapter(fAdapter);
        fAdapter.notifyDataSetChanged();

        qxCheckBox.setOnClickListener(null);
        qxCheckBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i < data.size(); i++){
                    data.get(i).setCheckr(qxCheckBox.isChecked());
                    for (int j = 0; j < data.get(i).getList().size(); j++){
                        data.get(i).getList().get(j).setCheck(qxCheckBox.isChecked());
                    }
                }
                fAdapter.notifyDataSetChanged();
                ToPrice();
            }
        });
        fAdapter.setmShopCallBackListener(new FAdapter.ShopCallBackListener() {
            @Override
            public void OneCall() {
                boolean FirstOne = true;
                for (int i = 0; i < data.size(); i++){
                    FirstOne = FirstOne&data.get(i).isCheckr();
                    for (int j = 0; j < data.get(i).getList().size(); j++){
                        FirstOne = FirstOne&data.get(i).getList().get(j).isCheck();
                    }
                }
                qxCheckBox.setChecked(FirstOne);
                ToPrice();
            }
        });
    }
    private void ToPrice(){
        double price = 0;
        for (int i = 0; i <data.size() ; i++) {

            for (int j = 0; j < data.get(i).getList().size(); j++) {

                if(data.get(i).getList().get(j).isCheck()==true){

                    double price1 = data.get(i).getList().get(j).getPrice();

                    int defalutNumber = data.get(i).getList().get(j).getDefalutNumber();

                    double sum = price1*defalutNumber;

                    price = price+sum;
                }

            }
        }

        zjTextView.setText(""+String.valueOf(price));
    }

    @Override
    public void onFiltre(String msg) {

    }
}

App

package com.bawei.jiejiaqi0404.app;

import android.app.Application;

import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.common.util.ByteConstants;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        DiskCacheConfig diskCacheConfig =
                DiskCacheConfig.newBuilder(this)
                        .setBaseDirectoryPath(this.getApplicationContext()
                                .getCacheDir())
                        .setBaseDirectoryName("com.bwei.work_three")
                        .setMaxCacheSize(100 * ByteConstants.MB)
                        .setMaxCacheSizeOnLowDiskSpace(60 * ByteConstants.MB)
                        .setMaxCacheSizeOnVeryLowDiskSpace(20 * ByteConstants.MB)
                        .build();
        ImagePipelineConfig build = ImagePipelineConfig.newBuilder(this)
                .setMainDiskCacheConfig(diskCacheConfig)
                .build();
        Fresco.initialize(this,build);
    }
}

二维码

package com.bawei.jiejiaqi0404;

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import com.journeyapps.barcodescanner.BarcodeEncoder;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class Main2Activity extends AppCompatActivity {

    @BindView(R.id.Button)
    android.widget.Button Button;
    @BindView(R.id.Button1)
    android.widget.Button Button1;
    @BindView(R.id.zx)
    ImageView zx;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.Button, R.id.Button1})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.Button:
                customScan();
                break;
            case R.id.Button1:
                 zx.setImageBitmap(encodeAs("sadasdasdasdas"));
                break;
        }
    }

    //扫描二维码
    public void customScan() {
        IntentIntegrator integrator = new IntentIntegrator(this);
        integrator.setDesiredBarcodeFormats(IntentIntegrator.CODE_39);
        integrator.setCaptureActivity(ScanActivity.class);
        integrator.setPrompt("请扫描二维码");//底部的提示文字,设为""可以置空
        integrator.setCameraId(0);//前置或者后置摄像头
        integrator.initiateScan();
    }
    //生成二维码
    public Bitmap encodeAs(String str) {
        Bitmap bitmap = null;
        BitMatrix result = null;
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        try {
            result = multiFormatWriter.encode(str, BarcodeFormat.QR_CODE, 200, 200);
            // 使用 ZXing Android Embedded 要写的代码
            BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
            bitmap = barcodeEncoder.createBitmap(result);
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException iae) {
            return null;
        }
        return bitmap;
    }

    @Override
    // 通过 onActivityResult的方法获取 扫描回来的 值
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (intentResult != null) {
            if (intentResult.getContents() == null) {
                Toast.makeText(this, "内容为空", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "扫描成功", Toast.LENGTH_LONG).show();
                // ScanResult 为 获取到的字符串
                String ScanResult = intentResult.getContents();
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值