一级购物车demo

来源:互联网 发布:交行网络支付异地消费 编辑:程序博客网 时间:2024/04/26 17:36
//导入依赖compile 'com.squareup.okhttp3:okhttp:3.9.0'compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'compile 'com.google.code.gson:gson:2.8.2'compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'compile 'org.greenrobot:eventbus:3.1.1'compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'//net包 Api
public class Api {    public static final String url = "http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0 ";    public static final String shopUrl = "http://120.27.23.105/product/getCarts?uid=100";}
//App
public class App extends Application {    @Override    public void onCreate() {        super.onCreate();        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this).build();        ImageLoader.getInstance().init(configuration);    }}
//HttpUtils
public class HttpUtils {    private static HttpUtils httpUtils;    private final OkHttpClient client;    private HttpUtils(){        //创建OkHttpClient        //创建拦截器        client = new OkHttpClient.Builder()                .addInterceptor(new LoggingInterceptor())                .build();    }    public static HttpUtils getHttpUtils(){        if(httpUtils == null){            synchronized (HttpUtils.class){                if(httpUtils == null){                    httpUtils=new HttpUtils();                }            }        }        return  httpUtils;    }    public void doGet(String url, Callback callback){        Request request = new Request.Builder().url(url).build();        client.newCall(request).enqueue(callback);    }    public void doPost(String url, Map<String, String> params, Callback callback) {        //这里可以加网络判断        //判断参数        // 创建Request        FormBody.Builder builder = new FormBody.Builder();        for (Map.Entry<String, String> entry : params.entrySet()) {            builder.add(entry.getKey(), entry.getValue());        }        FormBody formBody = builder.build();        Request request = new Request.Builder()                .url(url)                .post(formBody)                .build();        client.newCall(request).enqueue(callback);    }}
//
OnNetListener
public interface OnNetListener<T> {
    public void onSuccess(T t);    public void onFailure(Exception e);}
//
LoggingInterceptor拦截器
public class LoggingInterceptor implements Interceptor{    private static final String UA = "User-Agent";    @Override    public Response intercept(Chain chain) throws IOException {        Request request = chain.request()                .newBuilder()                .addHeader(UA, makeUA())                .build();        return chain.proceed(request);    }    private String makeUA() {        String s = Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;        return Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;    }}//展示数据的model层接口
public interface ISongModel {    public void GetSong(OnNetListener<SongBean> onNetListener);}

//展示数据的model层
public class SongModel implements ISongModel {   private Handler handler=new Handler(Looper.getMainLooper());    @Override    public void GetSong(final OnNetListener<SongBean> onNetListener) {        HttpUtils.getHttpUtils().doGet(Api.url, new Callback() {            @Override            public void onFailure(Call call, IOException e) {                onNetListener.onFailure(e);            }            @Override            public void onResponse(Call call, Response response) throws IOException {                String string=response.body().string();                Log.e("asf",string);                final SongBean shopBean=new Gson().fromJson(string,SongBean.class);                handler.post(new Runnable() {                    @Override                    public void run() {                        onNetListener.onSuccess(shopBean);                    }                });            }        });    }}

/购物车的model层接口
public interface IShopModel {    public void getShop(OnNetListener<ShopBean> onNetListener);}

//购物车的model层
public class ShopModel implements IShopModel {    private Handler handler=new Handler(Looper.getMainLooper());    @Override    public void getShop(final OnNetListener<ShopBean> onNetListener) {        HttpUtils.getHttpUtils().doGet(Api.shopUrl, new Callback() {            @Override            public void onFailure(Call call, IOException e) {                onNetListener.onFailure(e);            }            @Override            public void onResponse(Call call, Response response) throws IOException {            String string=response.body().string();                final ShopBean shopBean=new Gson().fromJson(string,ShopBean.class);                handler.post(new Runnable() {                    @Override                    public void run() {                       onNetListener.onSuccess(shopBean);                    }                });            }        });    }}
//展示数据的presenter
public class SongPresenter {    private final ISongModel iSongModel;    private IMainActivity iMainActivity;    public SongPresenter(IMainActivity iMainActivity) {        this.iMainActivity=iMainActivity;        iSongModel=new SongModel();    }    public void getShow(){        iSongModel.GetSong(new OnNetListener<SongBean>() {            @Override            public void onSuccess(SongBean songBean) {                List<SongBean.SongListBean> song_list = songBean.getSong_list();                iMainActivity.showList(song_list);            }            @Override            public void onFailure(Exception e) {                  e.printStackTrace();            }        });    }}
//购物车的presenter
public class ShopPresenter {    private IShopModel iShopModel;    private final IShopActivity iShopActivity;    public ShopPresenter(IShopActivity iShopActivity){        iShopModel=new ShopModel();        this.iShopActivity=iShopActivity;    }    public void getShop(){        iShopModel.getShop(new OnNetListener<ShopBean>() {            @Override            public void onSuccess(ShopBean shopBean) {                List<ShopBean.DataBean.ListBean> childList=                       new ArrayList<>();                for(int i=0;i<shopBean.getData().size();i++){                    ShopBean.DataBean dataBean = shopBean.getData().get(i);                    List<ShopBean.DataBean.ListBean> list = dataBean.getList();                    for(int j=0;j<list.size();j++){                        childList.add(list.get(j));                    }                }                iShopActivity.getShopList(childList);            }            @Override            public void onFailure(Exception e) {             e.printStackTrace();            }        });    }}
//展示数据view层接口
public interface IMainActivity {    public void showList(List<SongBean.SongListBean> songList);}
//展示数据MainActivity
public class MainActivity extends AppCompatActivity implements IMainActivity {    private RecyclerView mRv;    private MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        new SongPresenter(this).getShow();        mRv.setLayoutManager(new LinearLayoutManager(this));    }    private void initView() {        mRv = (RecyclerView) findViewById(R.id.rv);    }    @Override    public void showList(List<SongBean.SongListBean> songList) {        adapter=new MyAdapter(this,songList);        mRv.setAdapter(adapter);        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Intent intent=new Intent(MainActivity.this, ShopActivity.class);                startActivity(intent);            }        });    }}
//view层购物车接口
public interface IShopActivity {    public void getShopList(List<ShopBean.DataBean.ListBean> myList);}
//view层购物车方法
public class ShopActivity extends AppCompatActivity implements IShopActivity {    private RecyclerView mElv;    private CheckBox mCheckbox2;    private TextView mPriceTv;    private TextView mNumTv;    private MyShopAdapter shopAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_shop);        initView();        //注册        EventBus.getDefault().register(this);        new ShopPresenter(this).getShop();        mElv.setLayoutManager(new LinearLayoutManager(this));        mCheckbox2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                shopAdapter.allSelect(mCheckbox2.isChecked());            }        });    }    private void initView() {        mElv = (RecyclerView) findViewById(R.id.elv);        mCheckbox2 = (CheckBox) findViewById(R.id.checkbox2);        mPriceTv = (TextView) findViewById(R.id.tv_price);        mNumTv = (TextView) findViewById(R.id.tv_num);    }    @Override    public void getShopList(List<ShopBean.DataBean.ListBean> myList) {         shopAdapter=new MyShopAdapter(myList,this);          mElv.setAdapter(shopAdapter);    }    @Subscribe    public void onMessageEvent(MessageEvent event){        mCheckbox2.setChecked(event.isChecked());    }    //接收价格    @Subscribe    public void onMessageEvent(PriceAndCountEvent event) {        mNumTv.setText("结算(" + event.getCount() + ")");        mPriceTv.setText(event.getPrice() + "");    }    @Override    protected void onDestroy() {        super.onDestroy();        EventBus.getDefault().unregister(this);    }}
//evevtbusevent层传数据的方法
//传价格数量
public class PriceAndCountEvent {    private int price;    private int count;    public int getPrice() {        return price;    }    public void setPrice(int price) {        this.price = price;    }    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }}
//传全选按钮
public class MessageEvent {    private boolean checked;    public boolean isChecked() {        return checked;    }    public void setChecked(boolean checked) {        this.checked = checked;    }}

package mvpframework.bwie.com.monixmykdemo.adapter;
import android.content.Context;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 com.nostra13.universalimageloader.core.ImageLoader;import java.util.List;import mvpframework.bwie.com.monixmykdemo.R;import mvpframework.bwie.com.monixmykdemo.bean.SongBean;//展示
RecyclerView的适配器

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener { private List<SongBean.SongListBean> list; private Context context; //设置点击事件的变量 private OnItemClickListener mOnItemClickListener = null; public MyAdapter(Context context, List<SongBean.SongListBean> list) { this.context = context; this.list = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_song, parent, false); //设置点击事件 view.setOnClickListener(this); return new MyViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { final SongBean.SongListBean dataBean = list.get(position); final MyViewHolder myViewHolder = (MyViewHolder) holder; myViewHolder.itemView.setTag(position); myViewHolder.song_title.setText(dataBean.getArtist_name()); myViewHolder.song_date.setText(dataBean.getTitle()); String imgs=dataBean.getPic_big(); ImageLoader.getInstance().displayImage(imgs ,myViewHolder.song_iv); } @Override public int getItemCount() { return list.size(); } @Override public void onClick(View v) { if (mOnItemClickListener != null) { //注意这里使用getTag方法获取position mOnItemClickListener.onItemClick(v,(int)v.getTag()); } } class MyViewHolder extends RecyclerView.ViewHolder{ private ImageView song_iv; private TextView song_title; private TextView song_date; public MyViewHolder(View itemView) { super(itemView); song_iv=itemView.findViewById(R.id.song_iv); song_title=itemView.findViewById(R.id.song_title); song_date=itemView.findViewById(R.id.song_date); } } //定义点击接口 public static interface OnItemClickListener { void onItemClick(View view , int position); } //最后暴露给外面的调用者,定义一个设置Listener的方法(): public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener; }}
//一级购物车逻辑
public class MyShopAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    private List<ShopBean.DataBean.ListBean> myList;    private Context context;    public MyShopAdapter(List<ShopBean.DataBean.ListBean> myList, Context context) {        this.context = context;        this.myList = myList;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(context).inflate(R.layout.shopitem, parent, false);        return new MyShopViewHolder(view);    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {        final ShopBean.DataBean.ListBean listBean = myList.get(position);        final MyShopViewHolder myShopViewHolder = (MyShopViewHolder) holder;        myShopViewHolder.mChildCb.setChecked(listBean.isChecked());        myShopViewHolder.mTelTv.setText(listBean.getTitle());        myShopViewHolder.mTimeTv.setText(listBean.getCreatetime());        myShopViewHolder.mPriTv.setText(listBean.getPrice() + "");        myShopViewHolder.mMv.setNum(listBean.getNum()+"");        String[] split=listBean.getImages().split("\\|");        ImageLoader.getInstance().displayImage(split[0] ,myShopViewHolder.mIv);        myShopViewHolder.mChildCb.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //设置该条目对象里的checked属性值                listBean.setChecked( myShopViewHolder.mChildCb.isChecked());               //计算价格                for (int i=0;i<myList.size();i++) {                    PriceAndCountEvent compute = compute();                    EventBus.getDefault().post(compute);                    if (myShopViewHolder.mChildCb.isChecked()) {                        if (isAllChildCbSelected()) {                            changeAllCbState(true);                        }                        } else {                            changeAllCbState(false);                        }                        notifyDataSetChanged();                }            }        });        //减        myShopViewHolder.mMv.setDelClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                int num=myShopViewHolder.mMv.getNum();                if(num == 1){                    return ;                }                num--;                listBean.setNum(num);               if(myShopViewHolder.mChildCb.isChecked()){                   EventBus.getDefault().post(compute());                  notifyDataSetChanged();               }            }        });        //加        myShopViewHolder.mMv.setAddClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                int num = myShopViewHolder.mMv.getNum();                num++;                listBean.setNum(num);                if (myShopViewHolder.mChildCb.isChecked()) {                    EventBus.getDefault().post(compute());                }                notifyDataSetChanged();            }        });        //删除        myShopViewHolder.mDelTv.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {               myList.remove(position);                EventBus.getDefault().post(compute());                notifyDataSetChanged();            }        });    }    @Override    public int getItemCount() {        return myList.size();    }    class MyShopViewHolder extends RecyclerView.ViewHolder {        private TextView mTelTv;        private CheckBox mChildCb;        private ImageView mIv;        private TextView mContentTv;        private TextView mTimeTv;        private TextView mPriTv;        private MyView mMv;        private TextView mDelTv;        public MyShopViewHolder(View itemView) {            super(itemView);            mTelTv = (TextView) itemView.findViewById(R.id.tv_tel);            mChildCb = (CheckBox) itemView.findViewById(R.id.cb_child);            mIv = (ImageView) itemView.findViewById(R.id.iv);            mContentTv = (TextView) itemView.findViewById(R.id.tv_content);            mTimeTv = (TextView) itemView.findViewById(R.id.tv_time);            mPriTv = (TextView) itemView.findViewById(R.id.tv_pri);            mMv = (MyView) itemView.findViewById(R.id.mv);            mDelTv = (TextView) itemView.findViewById(R.id.tv_del);        }    }    //计算价格    private PriceAndCountEvent compute(){        int count=0;        int price=0;        for(int i=0;i<myList.size();i++){            ShopBean.DataBean.ListBean listBean = myList.get(i);            if(listBean.isChecked()){                price+=listBean.getPrice()*listBean.getNum();                count+=listBean.getNum();            }        }        PriceAndCountEvent priceAndCountEvent=new PriceAndCountEvent();        priceAndCountEvent.setCount(count);        priceAndCountEvent.setPrice(price);        return priceAndCountEvent;    }    //让一级列表全选    private boolean isAllChildCbSelected(){        for (int i = 0; i < myList.size(); i++) {            ShopBean.DataBean.ListBean listBeans = myList.get(i);            if (!listBeans.isChecked()) {                return false;            }        }        return true;    }    //让全选框选中    private void changeAllCbState(boolean flag){        MessageEvent messageEvent=new MessageEvent();        messageEvent.setChecked(flag);      EventBus.getDefault().post(messageEvent);    }    //点击全选的操作    public void allSelect(boolean flag) {        for (int i = 0; i < myList.size(); i++) {            ShopBean.DataBean.ListBean beans = myList.get(i);            beans.setChecked(flag);        }        EventBus.getDefault().post(compute());        notifyDataSetChanged();    }}