麦当当购物车

R.layout.car_fragment布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:orientation="horizontal"
    android:layout_weight="9">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_parent"
        android:layout_width="0dp"
        android:padding="10dp"
        android:layout_weight="3"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="7"
        android:orientation="vertical">
        <TextView
            android:id="@+id/text_title"
            android:padding="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_child"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </android.support.v7.widget.RecyclerView>
    </LinearLayout>
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">
    <ImageView
        android:id="@+id/image_shopping_cart"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:layout_height="wrap_content"
        android:background="@drawable/hei"/>
    <TextView
        android:id="@+id/text_count_price"
        android:layout_width="0dp"
        android:padding="10dp"
        android:layout_height="wrap_content"
        android:layout_weight="8"/>
</LinearLayout>

CarPageFragment主页面

package com.bw.meituanmoni.fragment;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
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.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bw.meituanmoni.R;
import com.bw.meituanmoni.adapter.CarLeftAdapter;
import com.bw.meituanmoni.adapter.CarRightAdapter;
import com.bw.meituanmoni.bean.ShopCar;
import com.bw.meituanmoni.fristmvp.presenter.IPresenter;
import com.bw.meituanmoni.shopcarmvp.presenter.ShopPresenter;
import com.bw.meituanmoni.shopcarmvp.presenter.ShopsPresenter;
import com.bw.meituanmoni.shopcarmvp.view.ShopView;

import java.math.BigDecimal;
import java.util.List;

/**

  • Created by lenovo on 2018-12-19.
    */

public class CarPageFragment extends Fragment implements ShopView{
private static final String ORDER_URL = “http://www.wanandroid.com/tools/mockapi/6523/restaurant-list”;

private String countPrice = "0";
private int i = 0;

private ShopPresenter mPresenter = new  ShopsPresenter(this);

private CarLeftAdapter leftAdapter;
private CarRightAdapter rightAdapter;
private TextView txtTitle;
private TextView txtPrice;
private ImageView imgLogo;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.car_fragment, null, false);
    //初始化控件
    RecyclerView recyclerParent = view.findViewById(R.id.recycler_parent);
    RecyclerView recyclerChild  = view.findViewById(R.id.recycler_child);
    txtTitle = view.findViewById(R.id.text_title);
    txtPrice = view.findViewById(R.id.text_count_price);
    imgLogo = view.findViewById(R.id.image_shopping_cart);

    txtPrice.setText("总价:¥" + countPrice);
    //创建适配器
    leftAdapter = new CarLeftAdapter(getContext());
    rightAdapter = new CarRightAdapter(getContext());

    //布局管理器和适配器
    recyclerParent.setLayoutManager(new LinearLayoutManager(getContext()));
    recyclerParent.setAdapter(leftAdapter);
    recyclerChild.setLayoutManager(new LinearLayoutManager(getContext()));
    recyclerChild.setAdapter(rightAdapter);

    //获取数据
    mPresenter.getOrderData(ORDER_URL);
    leftAdapter.setOnItemClickListener(new CarLeftAdapter.OnItemClickListener() {
        @Override
        public void setOnItemClickListener(List<ShopCar.DataBean.SpusBean> list, String title) {
            txtTitle.setText(title);
            rightAdapter.setList(list);
        }
    });

    rightAdapter.setOnNumChangeClickListener(new CarRightAdapter.OnNumChangeClickListener() {
        @Override
        public void setOnNumChangeClickListener(String price) {
            if (Double.parseDouble(price)>0){
                i++;
                imgLogo.setImageResource(R.drawable.huang);
            }else{
                i--;
                if (i==0){
                    imgLogo.setImageResource(R.drawable.hei);
                }
            }

            BigDecimal countpricedecimal=new BigDecimal(countPrice);
            BigDecimal pricedecimal=new BigDecimal(price);

            BigDecimal add=countpricedecimal.add(pricedecimal);
            countPrice=add.toString();

            txtPrice.setText("总价:¥"+countPrice);
        }
    });
    return view;
}

@Override
public void onFailure(String failureInfo) {
    Toast.makeText(getContext(), failureInfo, Toast.LENGTH_LONG)
            .show();
}

@Override
public void onOrderResponse(List<ShopCar.DataBean> list) {
         txtTitle.setText(list.get(0).getName());
         leftAdapter.setList(list);
         rightAdapter.setList(list.get(0).getSpus());
}

@Override
public void onDestroy() {
    super.onDestroy();
    mPresenter.onDestroy();
    mPresenter=null;
}

}

CarLeftAdapter适配器

package com.bw.meituanmoni.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.TextView;

import com.bw.meituanmoni.R;
import com.bw.meituanmoni.bean.ShopCar;

import java.util.ArrayList;
import java.util.List;

/**

  • Created by lenovo on 2018-12-19.
    */

public class CarLeftAdapter extends RecyclerView.Adapter<CarLeftAdapter.ViewHolder>{
private Context mContext;
private List<ShopCar.DataBean> mList;
private List mBooleans;

private OnItemClickListener mOnItemClickListener;
public CarLeftAdapter(Context context) {
mContext = context;
mList = new ArrayList<>();
mBooleans=new ArrayList<>();
}
public void setList(List<ShopCar.DataBean> list){
mList.clear();
mList.addAll(list);
for (int i = 0; i < mList.size(); i++) {
mBooleans.add(i==0);
}
notifyDataSetChanged();
}
@NonNull
@Override
public CarLeftAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = View.inflate(mContext, R.layout.item_carleft, null);
ViewHolder holder=new ViewHolder(view);
return holder;
}

@Override
public void onBindViewHolder(@NonNull final CarLeftAdapter.ViewHolder holder, int position) {
       final ShopCar.DataBean bean=mList.get(position);
      holder.title.setText(mList.get(position).getName());
      holder.itemView.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              mBooleans.clear();
              for (int j = 0; j <mList.size() ; j++) {
                  mBooleans.add(holder.getAdapterPosition()==j);
              }
              mOnItemClickListener.setOnItemClickListener(mList.get(holder.getAdapterPosition())
                      .getSpus(), bean.getName());
                  notifyDataSetChanged();

          }
      });
}

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

public class ViewHolder extends RecyclerView.ViewHolder {
    private TextView title;
    public ViewHolder(View itemView) {
        super(itemView);
        title=itemView.findViewById(R.id.title);
    }
}
public interface  OnItemClickListener{

void setOnItemClickListener(List<ShopCar.DataBean.SpusBean> list,String title);

}
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
    mOnItemClickListener=onItemClickListener;
}

}

item_carleft

<?xml version="1.0" encoding="utf-8"?>



CarRightAdapter适配器

package com.bw.meituanmoni.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bw.meituanmoni.R;
import com.bw.meituanmoni.bean.ShopCar;

import java.util.ArrayList;
import java.util.List;

/**

  • Created by lenovo on 2018-12-19.
    */

public class CarRightAdapter extends RecyclerView.Adapter<CarRightAdapter.ViewHolder>{
private Context mContext;
private List<ShopCar.DataBean.SpusBean> mList;
private OnNumChangeClickListener mOnNumChangeClickListener;
public CarRightAdapter(Context context) {
mContext = context;
mList = new ArrayList<>();
}

public void setList(List<ShopCar.DataBean.SpusBean> list){
mList.clear();
mList.addAll(list);
notifyDataSetChanged();
}
public void setOnNumChangeClickListener(OnNumChangeClickListener onNumChangeClickListener){
mOnNumChangeClickListener=onNumChangeClickListener;
}

@NonNull
@Override
public CarRightAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = View.inflate(mContext, R.layout.item_carright, null);
    ViewHolder holder=new ViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull final CarRightAdapter.ViewHolder holder, int position) {
  final ShopCar.DataBean.SpusBean bean=mList.get(position);
  final String price=bean.getSkus().get(0).getPrice();
  String month=bean.getMonth_saled_content();
  final int parseInt=Integer.parseInt(month);

    Glide.with(mContext).load(bean.getPic_url()).into(holder.imagePic);
    holder.textName.setText(bean.getName());
    holder.textMonthSale.setText("销售:"+parseInt);
    holder.textPrice.setText("$:"+price);

    if (bean.getMonth_saled()>parseInt){
        holder.textMinus.setVisibility(View.VISIBLE);
    }else{
        holder.textMinus.setVisibility(View.GONE);
    }

    holder.textMinus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            bean.setMonth_saled(bean.getMonth_saled() -1);
            if (bean.getMonth_saled()==parseInt){
                holder.textMinus.setVisibility(View.GONE);
            }
            mOnNumChangeClickListener.setOnNumChangeClickListener("-"+price);
        }
    });

    holder.textAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder.textMinus.setVisibility(View.VISIBLE);
            bean.setMonth_saled(bean.getMonth_saled()+1);
            mOnNumChangeClickListener.setOnNumChangeClickListener(price);
        }
    });
}

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

public class ViewHolder extends RecyclerView.ViewHolder {
    private ImageView imagePic;
    private TextView textName;
    private TextView  textMonthSale;
    private TextView  textPrice;
    private TextView  textMinus;
    private TextView  textAdd;
    public ViewHolder(View itemView) {
        super(itemView);
        imagePic = itemView.findViewById(R.id.image_pic);
        textName = itemView.findViewById(R.id.text_name);
        textMonthSale = itemView.findViewById(R.id.text_month_sale);
        textPrice = itemView.findViewById(R.id.text_price);
        textMinus = itemView.findViewById(R.id.text_minus);
        textAdd = itemView.findViewById(R.id.text_add);
    }
}

public interface OnNumChangeClickListener{
    void setOnNumChangeClickListener(String price);
}

}

item_carright布局

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android
xmlns:tools=“http://schemas.android.com/tools
android:layout_width=“match_parent”
android:layout_height=“match_parent”
xmlns:app=“http://schemas.android.com/apk/res-auto”>

<TextView
    android:id="@+id/text_name"
    android:layout_width="240dp"
    android:layout_height="38dp"
    android:maxLines="1"
    android:padding="10dp"
    android:textStyle="bold"
    app:layout_constraintBottom_toTopOf="@id/text_month_sale"
    app:layout_constraintLeft_toRightOf="@id/image_pic"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/text_month_sale"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"
    app:layout_constraintBottom_toTopOf="@id/text_price"
    app:layout_constraintLeft_toLeftOf="@id/text_name"
    app:layout_constraintTop_toBottomOf="@id/text_name" />

<TextView
    android:id="@+id/text_price"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="@id/text_name"
    app:layout_constraintTop_toBottomOf="@id/text_month_sale" />

<TextView
    android:id="@+id/text_minus"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:gravity="center"
    android:text="-"
    android:textSize="20sp"
    app:layout_constraintBottom_toBottomOf="@id/text_add"
    app:layout_constraintRight_toLeftOf="@id/text_add"
    app:layout_constraintTop_toTopOf="@id/text_add" />

<TextView
    android:id="@+id/text_add"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="+"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintRight_toRightOf="parent" />

</android.support.constraint.ConstraintLayout>

OkHttpUtils

package com.bw.meituanmoni.utils;

import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
import android.text.TextUtils;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;

/**

  • Created by lenovo on 2018-12-20.
    */

public class OkHttpUtils {
private static final int TIME_OUT = 5;

private static volatile OkHttpUtils sOkHttpUtils;

private final Handler mHandler;
private final OkHttpClient mOkHttpClient;

private Call mCall;

private OkHttpUtils() {

    mHandler = new Handler(Looper.getMainLooper());

    mOkHttpClient = new OkHttpClient.Builder().connectTimeout(TIME_OUT, TimeUnit.SECONDS)
            .readTimeout(TIME_OUT, TimeUnit.SECONDS)
            .build();
}

public static OkHttpUtils getInstance() {
    if (sOkHttpUtils == null) {
        synchronized (OkHttpUtils.class) {
            if (sOkHttpUtils == null) {
                sOkHttpUtils = new OkHttpUtils();
            }
        }
    }
    return sOkHttpUtils;
}


public void doGet(String url, final OkHttpCallBack callBack) {
    if (TextUtils.isEmpty(url) || callBack == null) {
        return;
    }
    Request request = new Request.Builder().url(url)
            .build();

    mCall = mOkHttpClient.newCall(request);
    mCall.enqueue(new Callback() {

        @Override
        public void onFailure(@NonNull Call call, @NonNull IOException e) {
            sendFailure(callBack, e.toString());
        }

        @Override
        public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
            ResponseBody body = response.body();

            if (response.isSuccessful() && body != null) {
                final String jsonString = body.string();

                mHandler.post(new Runnable() {

                    @Override
                    public void run() {
                        callBack.onResponse(jsonString);
                    }
                });
            } else {
                sendFailure(callBack, "网络请求失败了!!!");
            }
        }
    });
}

public void onDestroy() {
    if (mCall != null) {
        mCall.cancel();
    }
    mHandler.removeCallbacksAndMessages(null);
}

private void sendFailure(final OkHttpCallBack callBack, final String failureInfo) {
    mHandler.post(new Runnable() {

        @Override
        public void run() {
            callBack.onFailure(failureInfo);
        }
    });
}




public interface OkHttpCallBack {

    void onFailure(String failureInfo);

    void onResponse(String jsonString);

}

}

shopcarmvp

model

public interface ShopModel {
//获取网络数据
void getHttpData(String url, OkHttpUtils.OkHttpCallBack callBack);

void onDestroy();

}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
public class ShopsModel implements ShopModel{
@Override
public void getHttpData(String url, OkHttpUtils.OkHttpCallBack callBack) {
OkHttpUtils.getInstance().doGet(url,callBack);
}

@Override
public void onDestroy() {
 OkHttpUtils.getInstance().onDestroy();
}

}
///////////////////////////////////////////////////////////////////////////////////

view

public interface ShopView {
void onFailure(String failureInfo);

void onOrderResponse(List<ShopCar.DataBean> list);

}
//////////////////////////////////////////////////////////////////////////////

presenter

public interface ShopPresenter {
//获取订单
void getOrderData(String url);
void onDestroy();
}
/////////////////////////////////////////////////////////////////////////////
public class ShopsPresenter implements ShopPresenter{
private WeakReference mWeakReference;
private ShopModel mModel;

public ShopsPresenter(ShopView shopView){
     mWeakReference=new WeakReference<ShopView>(shopView);
     mModel=new ShopsModel();
}

private ShopView getShopView(){
    return  mWeakReference.get();
}
@Override
public void getOrderData(String url) {
    mModel.getHttpData(url, new OkHttpUtils.OkHttpCallBack() {
        @Override
        public void onFailure(String failureInfo) {
            getShopView().onFailure(failureInfo);
        }

        @Override
        public void onResponse(String jsonString) {
            ShopCar shopCar= new Gson().fromJson(jsonString, ShopCar.class);
            if (shopCar.getStatus()!=200){
                getShopView().onFailure(shopCar.getMessage());
            }else{
                getShopView().onOrderResponse(shopCar.getData());
            }
        }
    });
}

@Override
public void onDestroy() {
   mModel.onDestroy();
   mWeakReference=null;
}

}

猜你喜欢

转载自blog.csdn.net/chuanchuandaxia/article/details/85116736