OkHttp+RecyclerView购物车(二)
来源:互联网 发布:linux 发送tcp报文 编辑:程序博客网 时间:2024/06/05 07:32
先看看效果
首先就是先导入依赖
compile 'com.android.support:recyclerview-v7:25.3.1'compile 'com.squareup.okhttp3:okhttp:3.9.0'compile 'com.jakewharton:butterknife:8.8.1'compile 'com.jakewharton:butterknife-compiler:8.8.1'compile 'com.liaoinstan.springview:library:1.2.6'compile files('libs/gson-2.3.1.jar')compile files('libs/universal-image-loader-1.9.3.jar')
加链接网络的权限
<uses-permission android:name="android.permission.INTERNET"/>下面是布局activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="bwie.com.ggg.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/rl"></android.support.v7.widget.RecyclerView> <RelativeLayout android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="60dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:padding="5dp"> <TextView android:id="@+id/quanxuan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/a2" android:text="全选" android:textSize="20sp" /> <TextView android:layout_toRightOf="@+id/quanxuan" android:id="@+id/zongjia" android:layout_width="wrap_content" android:layout_height="25dp" android:text="总价:" android:textSize="16sp" android:textColor="#FF0000" android:layout_marginLeft="10dp"/> <TextView android:layout_toRightOf="@+id/quanxuan" android:layout_below="@+id/zongjia" android:id="@+id/geshu" android:layout_width="wrap_content" android:layout_height="25dp" android:text="总数:" android:textSize="16sp" android:textColor="#FF0000" android:layout_marginLeft="10dp"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="结算" android:background="#F4CA26" android:textColor="#FFFFFF" android:textSize="18sp" android:layout_alignBaseline="@+id/quanxuan" android:layout_alignBottom="@+id/quanxuan" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout>list_item
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp"> <CheckBox android:id="@+id/cb_cb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="false"/> <TextView android:id="@+id/tv_shang" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="............" android:layout_toRightOf="@+id/cb_cb" android:layout_marginLeft="10dp"/> <CheckBox android:id="@+id/xuan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:checked="false"/> <TextView android:layout_toRightOf="@+id/xuan" android:id="@+id/tv_tou" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="................." android:layout_marginLeft="10dp" android:layout_marginTop="30dp"/> <TextView android:layout_toRightOf="@+id/xuan" android:id="@+id/tv_ming" android:layout_below="@+id/tv_tou" android:layout_marginTop="5dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="................." android:layout_marginLeft="10dp"/> <TextView android:layout_below="@+id/tv_ming" android:layout_toRightOf="@+id/xuan" android:id="@+id/tv_jiage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="......" android:textColor="#FF0000" android:layout_marginLeft="10dp" android:layout_marginTop="10dp"/> <Button android:id="@+id/btn_shan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除订单" android:layout_alignBaseline="@+id/tv_ming" android:layout_alignBottom="@+id/tv_ming" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <RelativeLayout android:layout_width="100dp" android:layout_height="80dp" android:layout_alignParentTop="true" android:layout_toLeftOf="@+id/btn_shan" android:layout_toStartOf="@+id/btn_shan" android:layout_marginRight="14dp" android:layout_marginEnd="14dp" android:layout_marginTop="30dp"> <bwie.com.ggg.ShuLiang android:id="@+id/sl" android:layout_width="match_parent" android:layout_height="match_parent"></bwie.com.ggg.ShuLiang> </RelativeLayout></RelativeLayout>shuliang 这个是加减数量的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"><Button android:id="@+id/btn_jian" android:layout_width="35dp" android:layout_height="80dp" android:text="一"/> <EditText android:id="@+id/et_shu" android:layout_width="25dp" android:layout_height="80dp" android:text="1"/> <Button android:id="@+id/btn_jia" android:layout_width="35dp" android:layout_height="80dp" android:text="十"/></LinearLayout>---------------------------下面就是代码---------------------
MainActivity
import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.DividerItemDecoration;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.CheckBox;import android.widget.TextView;import com.google.gson.Gson;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import java.io.IOException;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;import butterknife.OnClick;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;public class MainActivity extends AppCompatActivity { String bai = "http://120.27.23.105/product/getCarts?uid=100"; RecyclerView rv; private List<Bean.DataBean> data=new ArrayList<>(); private List<Bean.DataBean.ListBean> list=new ArrayList<>(); @BindView(R.id.quanxuan)//全选按钮 TextView qxBtn; @BindView(R.id.zongjia) TextView zongjia; @BindView(R.id.geshu) TextView geshu; boolean allck = false; Myadapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); rv = (RecyclerView) findViewById(R.id.rv); //初始化ImageLoader ImageLoaderConfiguration cofn = ImageLoaderConfiguration.createDefault(this); ImageLoader.getInstance().init(cofn); DisplayImageOptions simple = DisplayImageOptions.createSimple(); okURL(); init(); } private void init() { //LinearLayoutManager布局样式 LinearLayoutManager manager = new LinearLayoutManager(this); // GridLayoutManager布局样式 //GridLayoutManager manager = new GridLayoutManager(this, 2); //设置样式 rv.setLayoutManager(manager); //设置方向 VERTICAL垂直方向 //想要添加分割线,必须要写上这行代码 rv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); } //okhttp的网络请求 private void okURL() { OkHttp3Utils.doGet(bai, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { //Gson解析 Gson gson = new Gson(); String strs = response.body().string(); data = gson.fromJson(strs, Bean.class).getData(); //循环遍历找底层集合里的数据 for (int i = 0; i < data.size(); i++) { for (int j = 0; j < data.get(i).getList().size(); j++) { list.add(data.get(i).getList().get(j)); } } //判断call,如果返回ture就继续执行,否则就不行 if (response.isSuccessful()) { runOnUiThread(new Runnable() { @Override public void run() { adapter=new Myadapter(); //设置适配器 rv.setAdapter(adapter); //刷新适配器 //adapter.notifyDataSetChanged(); } }); } } }); } //计算商品个数和总价 private void getzongshuju() { double sum = 0;//初始价格总和 int zongshu = 0;//初始商品总数 for (int i = 0; i < list.size(); i++) { if (list.get(i).getSelected() == 1) {//判断 商品是否是选中状态 //获得选中商品数量 int i1 = list.get(i).getNum(); //价格总和 = 价格总和 + 廉价后的价格* 选中商品数量 sum = sum + list.get(i).getBargainPrice() * i1; //总个数=总个数+获得选中商品的数量 zongshu = zongshu + i1; } } //将得到的总价 转换成浮点型 赋给 zongjia(总价) zongjia.setText("总价:" + new DecimalFormat("0.00").format(sum)); geshu.setText("共" + zongshu + "件商品");//将得到的总个数赋给 geshu(个数) } private void jiageshu() { double sum = 0;//初始价格总和 int zongshu = 0;//初始商品总数 for (int i = 0; i < data.size(); i++) { if (data.get(i).getSellerid().equals(1)) {//判断 商品是否是选中状态 //获得选中商品数量 int i1 =list.get(i).getNum(); //价格总和 = 价格总和 + 廉价后的价格* 选中商品数量 sum = sum + list.get(i).getBargainPrice() * i1; //总个数=总个数+获得选中商品的数量 zongshu = zongshu + i1; } } zongjia.setText("总价:" + new DecimalFormat("0.00").format(sum)); geshu.setText("共" + zongshu + "件商品");//将得到的总个数赋给 geshu(个数 } @OnClick(R.id.quanxuan) public void onViewClicked() { allck = !allck;//全部选中,或者全部不选中 if (allck) { //判断 是否是全选中状态 //是全选中状态 赋给全选按钮的背景资源是 shopcart_selected 这个图片 qxBtn.setBackgroundResource(R.drawable.a1); for (int i = 0; i < list.size(); i++) { //给商品的选中状态都变成 1 (就是选中状态) list.get(i).setSelected(1); list.get(i).setShopsele(true);//给商铺的选中状态都变成 true (就是选中状态) } } else { //不是全选中状态 赋给全选按钮的背景资源是 shopcart_unselected 这个图片 qxBtn.setBackgroundResource(R.drawable.a2); for (int i = 0; i < list.size(); i++) { list.get(i).setSelected(0);//给商品的选中状态都变成 0 (就是不选中状态) list.get(i).setShopsele(true);//给商铺的选中状态都变成 false (就是不选中状态) } } getzongshuju();//计算商品个数和总价 adapter.notifyDataSetChanged(); } //适配器类 class Myadapter extends RecyclerView.Adapter<Myadapter.MyViewHolder> { @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(MainActivity.this, R.layout.list_item, null); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, final int position) { for (int i = 0; i < data.size(); i++) { if (data.get(i).getSellerid().equals(""+list.get(position).getSellerid())){ holder.tv_shang.setText(data.get(i).getSellerName()); } } if (allck==true){ holder.cb_cb.setBackgroundResource(R.drawable.a1); holder.cb_xuan.setBackgroundResource(R.drawable.a1); } else { holder.cb_cb.setBackgroundResource(R.drawable.a2); holder.cb_xuan.setBackgroundResource(R.drawable.a2); } //holder.tv_shang.setText(data.get(position).getSellerName()); holder.tv_tou.setText(list.get(position).getTitle()); holder.tv_ming.setText(list.get(position).getSubhead()); holder.tv_jiage.setText(list.get(position).getPrice() + ""); //删除按钮 holder.btn_shan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { list.remove(position); notifyDataSetChanged(); } }); } @Override public int getItemCount() { return list.size(); } class MyViewHolder extends RecyclerView.ViewHolder { TextView tv_tou, tv_ming, tv_jiage,tv_shang; Button btn_shan; CheckBox cb_xuan,cb_cb; public MyViewHolder(View itemView) { super(itemView); cb_xuan= (CheckBox) itemView.findViewById(R.id.xuan); cb_cb= (CheckBox) itemView.findViewById(R.id.cb_cb); tv_tou = (TextView) itemView.findViewById(R.id.tv_tou); tv_ming = (TextView) itemView.findViewById(R.id.tv_ming); tv_jiage = (TextView) itemView.findViewById(R.id.tv_jiage); tv_shang = (TextView) itemView.findViewById(R.id.tv_shang); btn_shan = (Button) itemView.findViewById(R.id.btn_shan); } } }}OkHttp3Utils OkHttp封装,这是封装好的也不用再修改什么变量,就直接复制就能用
import android.util.Log;import java.io.File;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;/** * OkHttp的封装类 */public class OkHttp3Utils { private static OkHttpClient okHttpClient = null; public OkHttp3Utils() { } private static OkHttpClient getOkHttpClient() { synchronized (OkHttp3Utils.class) { if (okHttpClient == null) { okHttpClient = new OkHttpClient(); } } return okHttpClient; } //上传文件 public static void loadFile(String url, File file,String fileName){ OkHttpClient okHttpClient = getOkHttpClient(); //设置文件类型 RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"),file); //设置请求体 RequestBody body = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("image",fileName,requestBody) .build(); //请求方式 Request request = new Request.Builder().url(url).post(body).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { Log.i("成功","成功"); } }); } /** * 1.接口地址 * 2.接口回调 */ public static void doGet(String url,Callback callback){ OkHttpClient okHttpClient = getOkHttpClient(); Request request = new Request.Builder().url(url).build(); okHttpClient.newCall(request).enqueue(callback); } /** * 1.地址 * 2.接口回调 * 3.请求体 */ public static void doPost(String url, Map<String,String> map,Callback callback){ OkHttpClient okHttpClient = getOkHttpClient(); FormBody.Builder builder = new FormBody.Builder(); //遍历map集合 设置请求体 for (String mapKey : map.keySet()){ builder.add(mapKey,map.get(mapKey)); } //设置请求方式 Request request = new Request.Builder().url(url).post(builder.build()).build(); //执行请求方式 接口回调 okHttpClient.newCall(request).enqueue(callback); } /** *1.下载地址 */ public static void doDown(String url,Callback callback){ OkHttpClient okHttpClient = getOkHttpClient(); Request build = new Request.Builder().url(url).build(); okHttpClient.newCall(build).enqueue(callback); }}ShuLiang 计算加减商品数量的类
import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.TextView;public class ShuLiang extends LinearLayout { Button btn_jian,btn_jia; EditText et_shu; int bai=1; public ShuLiang(Context context) { super(context); } public ShuLiang(Context context, AttributeSet attrs) { super(context, attrs); View view=LinearLayout.inflate(context,R.layout.shuliang,null); btn_jian= (Button) view.findViewById(R.id.btn_jian); btn_jia= (Button) view.findViewById(R.id.btn_jia); et_shu= (EditText) view.findViewById(R.id.et_shu); btn_jian.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String content=et_shu.getText().toString().trim(); int count=Integer.valueOf(content)-1; bai=count; if (count>1){ et_shu.setText(count+""); } } }); btn_jia.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String content=et_shu.getText().toString().trim(); int count=Integer.valueOf(content)+1; bai=count; et_shu.setText(count+""); } }); addView(view); } public ShuLiang(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }}一个简单的购物车就出来了,里面还有些小bug,
阅读全文
1 0
- OkHttp+RecyclerView购物车(二)
- 使用RecyclerView+OkHttp实现购物车
- MVP+OKhttp+拦截器+RecyclerView+自定义view 实现请求网络数据的二级列表购物车
- RecyclerView实现购物车
- 购物车Recyclerview实现
- RecyclerView实现购物车
- 购物车Recyclerview
- 添加查询删除+retrofit请求+okHttp请求+fresco加载图片+recyclerview加载数据二级购物车+视频播放
- Recyclerview嵌套Recyclerview实现简单购物车
- RecyclerView 实现购物车功能
- 使用RecyclerView实现购物车
- RecyclerView 购物车 二级列表
- RecyclerView 购物车 二级列表
- 购物车之Recyclerview列表
- okhttp+recyclerview
- okhttp+recyclerView
- RecyclerView okHttp
- 使用recycleview,okhttp实现购物车
- datagrid 列表下拉框模糊查询
- 在全志R16平台的tinav2.1系统下点亮客户的RGB屏幕V1.0(分色排版)
- Kotlin Anko简单使用
- HDFS深入浅析
- dump所有cpu的callstack
- OkHttp+RecyclerView购物车(二)
- DARLA: Improving Zero-Shot Transfer in Reinforcement Learning 阅读笔记
- 如何取消本地svn目录关联
- YOLO阅读笔记
- git-2.15.0-64
- AI First:互联网进步的背后,反映出的是流量的再分配
- 深度学习21天实战实战caffe学习笔记<5>
- 原生js实现隔行变色
- 如何挑选核心控制芯片