一级购物车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包 Apipublic 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";}//Apppublic class App extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this).build(); ImageLoader.getInstance().init(configuration); }}//HttpUtilspublic 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层接口//购物车的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);}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); } }); } }); }}//展示数据的presenterpublic 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(); } }); }}//购物车的presenterpublic 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);}//展示数据MainActivitypublic 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层购物车方法//evevtbusevent层传数据的方法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); }}
//传价格数量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(); }}
阅读全文
0 0
- 一级购物车demo
- 一级列表购物车
- 一级购物车
- 一级列表购物车
- 一级购物车
- 购物车一级列表
- 一级购物车
- 一级购物车逻辑
- 一级购物车
- 一级购物车布局
- 一级购物车代码
- 一级列表的购物车
- 一级列表购物车完整版
- 一级列表的购物车
- 仿购物车一级列表
- android一级列表购物车
- 购物车一级列表布局
- AngularJS-购物车Demo
- 面向对象(二)
- 数据库操作
- java 在线查看本地pdf文档或者图片
- 数据结构实验之图论六:村村通公路
- ModelMap和ModelAndView的作用
- 一级购物车demo
- C++ 操作64位系统,默认读取Wow6432Node子键的解决方法。
- myeclipse10.X 破解 product activation must be completed within 5 days解决办法
- Mac 安装redis-4.0.2
- 从ORACLE到SQL SERVER的透明网关的安装和配置
- html实时效果查看的实现
- OC中条件编译须留意是否导入了相关头文件
- laravel导出Excel
- Android Studio中配置Retrolambda插件【mac】