//activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.com.myapplication.v.MainActivity"> <ListView android:id="@+id/lvone" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="9" /> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <CheckBox android:id="@+id/check" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="全选"/> <TextView android:id="@+id/zongjia" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:paddingTop="25dp" android:gravity="center" android:text="总价:"/> <TextView android:layout_gravity="center" android:id="@+id/textone" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" /> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="结账"/> </LinearLayout> </LinearLayout>
//item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="match_parent"> <CheckBox android:id="@+id/checkboxone" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <ImageView android:id="@+id/imageviewone" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <LinearLayout android:layout_weight="6" android:layout_width="0dp" android:orientation="vertical" android:layout_height="match_parent"> <TextView android:id="@+id/textone" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp" android:text="商品名" android:gravity="center" android:textColor="#ff00"/> <TextView android:id="@+id/texttwo" android:textColor="#ffff00" android:layout_weight="1" android:gravity="center" android:layout_width="match_parent" android:layout_height="0dp" android:text="数量" /> <TextView android:id="@+id/textthree" android:textColor="#00ff00" android:layout_weight="1" android:gravity="center" android:layout_width="match_parent" android:layout_height="0dp" android:text="价格" /> <LinearLayout android:layout_weight="1" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="0dp" > <Button android:id="@+id/jian" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="-"/> <TextView android:id="@+id/textfour" android:layout_width="0dp" android:layout_weight="1" android:gravity="center" android:layout_height="match_parent" android:text="0"/> <Button android:id="@+id/jia" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="+"/> </LinearLayout> </LinearLayout> <Button android:id="@+id/remove" android:layout_width="0dp" android:layout_weight="2" android:layout_height="match_parent" android:text="删除"/>
//abapter类
package com.example.com.myapplication.abapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.example.com.myapplication.R; import com.example.com.myapplication.m.ShoppingBean; import com.example.com.myapplication.v.MainActivity; import java.util.List; /** * Created by 丶未央 on 2018/3/30. */ public class MyAbapter extends BaseAdapter{ Context context; List<ShoppingBean.DataBean> list; private View view1; Numinterface numinterface; public MyAbapter(Context context, List<ShoppingBean.DataBean> list) { this.context=context; this.list=list; } public void getshop(Numinterface numinterface){ this.numinterface=numinterface; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { final Viewholder viewholder; if(view==null){ view = View.inflate(context, R.layout.item, null); viewholder = new Viewholder(); viewholder.textone= view.findViewById(R.id.textone); viewholder.texttwo= view.findViewById(R.id.textfour); viewholder.textthree= view.findViewById(R.id.textthree); viewholder.textfour= view.findViewById(R.id.texttwo); viewholder.jian= view.findViewById(R.id.jian); viewholder.jia= view.findViewById(R.id.jia); viewholder.remove= view.findViewById(R.id.remove); viewholder.checkboxone= view.findViewById(R.id.checkboxone); viewholder.imageone= view.findViewById(R.id.imageviewone); view.setTag(viewholder); }else{ viewholder = (Viewholder) view.getTag(); } String images = list.get(i).getImages(); String[] split = images.split("\\|"); viewholder.textone.setText(list.get(i).getTitle()); viewholder.texttwo.setText(list.get(i).getSellerid()+""); viewholder.textthree.setText(list.get(i).getPrice()+""); viewholder.checkboxone.setChecked(list.get(i).getIscheck()); Glide.with(context).load(split[0]).into(viewholder.imageone); //按钮的添加 viewholder.jia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { numinterface.jianum(i,viewholder.texttwo,viewholder.checkboxone.isChecked()); } }); //减的作用 viewholder.jian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { numinterface.jiannum(i,viewholder.texttwo,viewholder.checkboxone.isChecked()); } }); //checkbox viewholder.checkboxone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { list.get(i).setIscheck(viewholder.checkboxone.isChecked()); numinterface.quanxuan(); } }); return view; } class Viewholder{ TextView textone,texttwo,textthree,textfour; Button jian,jia,remove; CheckBox checkboxone; ImageView imageone; } //定义接口 public interface Numinterface{ void jianum(int i,TextView textView,Boolean ischeck); void jiannum(int i,TextView textView,Boolean ischeck); void quanxuan(); } }
//Moudle层
//getMoudle接口
package com.example.com.myapplication.m; import com.example.com.myapplication.p.Datep; /** * Created by 丶未央 on 2018/3/29. */ public interface Getm { void getDate(String url, Datep datep); }
、、、、、、MygetMoudler类
package com.example.com.myapplication.m; import com.example.com.myapplication.Util.OkhtttpUtils; import com.example.com.myapplication.p.Datep; import com.google.gson.Gson; import java.io.IOException; import java.util.Date; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; /** * Created by 丶未央 on 2018/3/29. */ public class Mygetm implements Getm{ @Override public void getDate(String url, final Datep datep) { //请求数据 OkhtttpUtils.doGet(url, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { //可以认为是请求成功 String json = response.body().string(); Gson gson = new Gson(); ShoppingBean shoppingBean = gson.fromJson(json, ShoppingBean.class); List<ShoppingBean.DataBean> list = shoppingBean.getData(); datep.success(list); } }); } }
、、、、、、、、、、、数据接口数据类
、///P层
、、、、、、、Datep接口
package com.example.com.myapplication.p; import com.example.com.myapplication.m.ShoppingBean; import java.util.List; /** * Created by 丶未央 on 2018/3/29. */ public interface Datep { void success(List<ShoppingBean.DataBean> list); void error(); }
、、、、、、、Mydatep类
package com.example.com.myapplication.p; import com.example.com.myapplication.m.Mygetm; import com.example.com.myapplication.m.ShoppingBean; import com.example.com.myapplication.v.Dateview; import java.util.List; /** * Created by 丶未央 on 2018/3/29. */ public class Mydatep implements Datep { final Mygetm mygetm; Dateview dateview; public Mydatep(Dateview dateview){ this.dateview=dateview; mygetm = new Mygetm(); } @Override public void success(List<ShoppingBean.DataBean> list) { dateview.Tobackhome(list); } @Override public void error() { } //请求数据方法 public void getNet(String dataUrl) { mygetm.getDate(dataUrl,this); } }
//Utile
package com.liulailin.demo.shoping.Utils;
import android.os.Environment;
import java.io.File;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Cache;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import static android.R.string.ok;
import static android.os.Build.VERSION_CODES.M;
/**
* Created by Administrator on 2018/3/8.
*/
public class OkhtttpUtils {
//单例模式,把构造方法进行私有化
//
private OkhtttpUtils(){};
static OkHttpClient client;
public static OkHttpClient getInstance(){
if (client==null) {
//更加安全
synchronized (OkhtttpUtils.class) {
//缓存的地方 mnt/sdcard
File file = new File(Environment.getExternalStorageDirectory(), "cache11");
client = new OkHttpClient().newBuilder()
.readTimeout(3000, TimeUnit.SECONDS) //设置读取超时时间
.connectTimeout(3000, TimeUnit.SECONDS) //设置连接的超时时间
.cache(new Cache(file, 10 * 1024))
.build();
}
}
return client;
}
/**
* get请求
* Callback 是一个接口
*/
public static void doGet(String url, Callback callback){
//1:拿到okhttpclient 对像
OkHttpClient client = getInstance();
//2:进行请求的操作
Request request = new Request.Builder()
.url(url)
.build();
client.newCall(request).enqueue(callback);
}
//post请求
/**
*
* @param url 请求的地址
* @param parms 请求的参数
* @param callback callback
*/
public static void doPost(String url, Map<String,String> parms,Callback callback){
//得到客户端的对像
OkHttpClient client = getInstance();
//不是FormBody,而是一个Builder
FormBody.Builder body = new FormBody.Builder();
//key value
for (String key:parms.keySet()){
//value的值
body.add(key,parms.get(key));
}
Request request = new Request.Builder()
.url(url)
.post(body.build())
.build();
client.newCall(request).enqueue(callback);
}
//用来上传图片的
//url , 图片 ,参数 Callback
public static void upImage(String url,File file,String filenName,Map<String,String> params,Callback callback){
OkHttpClient client = getInstance();
//requestBody的实现类 Formbody
MultipartBody.Builder builder = new MultipartBody.Builder();
if (params!=null){
for (String key :params.keySet()){
builder.addFormDataPart(key,params.get(key));
}
}
//设置类型
builder.setType(MultipartBody.FORM);
builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file));
// builder.setType(MultipartBody.FORM);
// builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file));
//builder.addFormDataPart("file","aa.png",builder.build());
Request request = new Request.Builder()
.url(url)
.post(builder.build())
.build();
client.newCall(request).enqueue(callback);
}
}
、、、、、、View层
mainaction类
package com.example.com.myapplication.v; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.CheckBox; import android.widget.ListView; import android.widget.TextView; import com.example.com.myapplication.R; import com.example.com.myapplication.abapter.MyAbapter; import com.example.com.myapplication.m.ShoppingBean; import com.example.com.myapplication.p.Mydatep; import java.util.List; public class MainActivity extends AppCompatActivity implements Dateview,MyAbapter.Numinterface{ String dataUrl ="https://www.zhaoapi.cn/product/getProducts?pscid=1"; private TextView textone; private ListView lvone; private MyAbapter myAbapter; private Handler handler= new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); list = (List<ShoppingBean.DataBean>) msg.obj; myAbapter = new MyAbapter(MainActivity.this, list); lvone.setAdapter(myAbapter); myAbapter.getshop(MainActivity.this); } }; private List<ShoppingBean.DataBean> list; private TextView zongjia; private CheckBox checkBox; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textone = findViewById(R.id.textone); lvone = findViewById(R.id.lvone); zongjia = findViewById(R.id.zongjia); checkBox = findViewById(R.id.check); checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { for (int i = 0; i <list.size() ; i++) { list.get(i).setIscheck(checkBox.isChecked()); } changPrice(); } }); Mydatep mydatep = new Mydatep(this); mydatep.getNet(dataUrl); } @Override public void Tobackhome(List<ShoppingBean.DataBean> list) { Message msg = new Message(); msg.obj=list; handler.sendMessage(msg); } @Override public void jianum(int i,TextView textView,Boolean ischeck) { int curr = list.get(i).getSellerid(); curr++; list.get(i).setSellerid(curr); //Log.d("--" , "jianum: "+ list.get(i).getSellerid()); changPrice(); myAbapter.notifyDataSetChanged(); } private void changPrice() { double intdate=0; for (int x = 0; x < list.size(); x++) { ShoppingBean.DataBean dataBean = list.get(x); if(dataBean.getIscheck()){ intdate+=list.get(x).getPrice()*list.get(x).getSellerid(); // allprice +=list.get(x).getPrice()*list.get(x).getSellerid(); } } zongjia.setText(intdate+""); myAbapter.notifyDataSetChanged(); } @Override public void jiannum(int i,TextView textView,Boolean ischeck) { int curr = list.get(i).getSellerid(); curr--; list.get(i).setSellerid(curr); myAbapter.notifyDataSetChanged(); } @Override public void quanxuan() { changPrice(); } }
///getview接口
package com.example.com.myapplication.v; import com.example.com.myapplication.m.ShoppingBean; import java.util.List; /** * Created by 丶未央 on 2018/3/29. */ public interface Dateview { void Tobackhome(List<ShoppingBean.DataBean> list); }