//OkHttpUtils
public class OkHttpUtils {
private Handler handler=new Handler();
private OkHttpClient okHttpClient;
private static OkHttpUtils mInstance;
/**
* 私有构造
*/
private OkHttpUtils(){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.readTimeout(5,TimeUnit.SECONDS)
.writeTimeout(5,TimeUnit.SECONDS)
.connectTimeout(5,TimeUnit.SECONDS)
.build();
}
public static OkHttpUtils getmInstance() {
if (mInstance==null){
synchronized (OkHttpUtils.class){
if (mInstance==null){
mInstance=new OkHttpUtils();
}
}
}
return mInstance;
}
public void Post( HashMap<String,String> params,final HttpCallBack httpCallBack){
//请求体和相应
FormBody.Builder formbody = new FormBody.Builder();
for (Map.Entry<String,String> p:params.entrySet()){
formbody.add(p.getKey(),p.getValue());
}
final RequestBody requestBody = formbody.build();
Request request = new Request.Builder()
.url(ProductApi.CART_URL)
.post(requestBody)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (httpCallBack!=null){
handler.post(new Runnable() {
@Override
public void run() {
httpCallBack.failure("网络异常");
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(requestBody!=null){
if (response.code()==200){
final String result = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
httpCallBack.success(result);
}
});
}
}
}
});
}
}
//HttpCallBack
public interface HttpCallBack {
void success(String result);
void failure(String msg);
}
//Api
public class Api {
public static final String BASE_URL=“http://www.zhaoapi.cn/”;
}
//ProductApi
public class ProductApi {
//购物车
public static final String CART_URL=Api.BASE_URL+“product/getCarts?uid=71”;
}
//Bean
public class CartBean {
public String code;
public String msg;
public List data;
public class Cart{
public boolean isChecked;//一级列表是否被选中
public String sellerName;
public String sellerid;
public List<Product> list;
public class Product{
public boolean isProductChecked;//二级列表是否被选中
public String title;
public String images;
public double price;
public String pid;
public int pos;
public int productNum=1;
}
}
}
//CartContract
public interface CartContract {
public abstract class CartPresenter{
public abstract void getCarts(HashMap<String,String> params);
}
interface ICartModel{
void getCarts(HashMap<String,String> params,ICartmodelCallback iCartmodelCallback);
}
interface ICartView{
void success(List<CartBean.Cart> list);
void failure(String msg);
}
}
//CartModel
public class CartModel implements CartContract.ICartModel{
private Handler handler=new Handler();
@Override
public void getCarts(HashMap<String, String> params, final ICartmodelCallback callback) {
OkHttpUtils.getmInstance().Post(params, new HttpCallBack() {
@Override
public void success(final String result) {
handler.post(new Runnable() {
@Override
public void run() {
callback.success(result);
}
});
}
@Override
public void failure(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
callback.failure(msg);
}
});
}
});
}
}
//ICartmodelCallback
public interface ICartmodelCallback {
void success(String result);
void failure(String msg);
}
//CartPresenter
public class CartPresenter extends CartContract.CartPresenter {
private CartModel cartModel;
private CartContract.ICartView iCartView;
public CartPresenter(CartContract.ICartView iCartView) {
cartModel =new CartModel();
this.iCartView = iCartView;
}
@Override
public void getCarts(HashMap<String, String> params) {
cartModel.getCarts(params, new ICartmodelCallback() {
@Override
public void success(String result) {
CartBean cartBean = new Gson().fromJson(result, CartBean.class);
iCartView.success(cartBean.data);
}
@Override
public void failure(String msg) {
iCartView.failure(msg);
}
});
}
}
//CartAdapter
public class CartAdapter extends XRecyclerView.Adapter<CartAdapter.MyVh>{
private Context context;
private List<CartBean.Cart> carts;
private CartUICallback cartUICallback;
public CartAdapter(CartUICallback cartUICallback) {
this.cartUICallback = cartUICallback;
}
public CartAdapter(Context context, List<CartBean.Cart> carts) {
this.context = context;
this.carts = carts;
}
@NonNull
@Override
public CartAdapter.MyVh onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(context).inflate(R.layout.activity_cart_item,viewGroup,false);
return new MyVh(view);
}
@Override
public void onBindViewHolder(@NonNull final CartAdapter.MyVh myVh, int i) {
if (carts.get(i).list.size()>0){
final CartBean.Cart cart = carts.get(i);
myVh.nameTv.setText(cart.sellerName);
myVh.checkbox.setChecked(cart.isChecked);
ProductAdapter productAdapter = new ProductAdapter(context,cart.list);
myVh.rv.setLayoutManager(new LinearLayoutManager(context));
myVh.rv.setAdapter(productAdapter);
}
}
@Override
public int getItemCount() {
return carts==null?0:carts.size();
}
public class MyVh extends RecyclerView.ViewHolder {
private XRecyclerView rv;
private CheckBox checkbox;
private TextView nameTv;
public MyVh(@NonNull View itemView) {
super(itemView);
rv = itemView.findViewById(R.id.rv);
checkbox = itemView.findViewById(R.id.checkbox);
nameTv = itemView.findViewById(R.id.name);
}
}
}
//ProductAdapter
public class ProductAdapter extends XRecyclerView.Adapter<ProductAdapter.MyVh> {
private Context context;
private List<CartBean.Cart.Product> carts;
public ProductAdapter(Context context, List<CartBean.Cart.Product> carts) {
this.context = context;
this.carts = carts;
}
@NonNull
@Override
public ProductAdapter.MyVh onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(context).inflate(R.layout.product_item_layout,viewGroup,false);
return new MyVh(view);
}
@Override
public void onBindViewHolder(@NonNull ProductAdapter.MyVh myVh, int i) {
//获取下标
CartBean.Cart.Product product = carts.get(i);
//判断是否选中
myVh.checkbox.setChecked(product.isProductChecked);
//切割
String[] imgs = product.images.split("\\|");
if (imgs!=null&&imgs.length>0){
Glide.with(context).load(imgs[0]).into(myVh.iv);
}
myVh.priceTv.setText("¥:"+product.price);
myVh.titleTv.setText(product.title);
}
@Override
public int getItemCount() {
//三目
return carts==null?0:carts.size();
}
public class MyVh extends RecyclerView.ViewHolder {
private ImageView iv;
private CheckBox checkbox;
private TextView titleTv;
private TextView priceTv;
public MyVh(@NonNull View itemView) {
super(itemView);
iv = itemView.findViewById(R.id.iv_product);
checkbox = itemView.findViewById(R.id.checkbox);
titleTv = itemView.findViewById(R.id.title);
priceTv = itemView.findViewById(R.id.price);
}
}
}
//CartActivity
public class CartActivity extends AppCompatActivity implements CartContract.ICartView{
private XRecyclerView rv;
private CheckBox checkbox;
private CartPresenter cartPresenter;
private CartAdapter cartAdapter;
private int page=1;
private List<CartBean.Cart> carts;
private HashMap<String, String> params;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
//视图
initView();
//数据
initData();
}
//数据
private void initData() {
cartPresenter = new CartPresenter(this);
carts = new ArrayList<>();
cartPresenter.getCarts(new HashMap<String, String>());
}
//视图
private void initView() {
rv = (XRecyclerView) findViewById(R.id.rv);
checkbox = (CheckBox) findViewById(R.id.checkbox);
rv.setLayoutManager(new LinearLayoutManager(this));
//全选全不选
checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
for (CartBean.Cart cart : carts) {
cart.isChecked=true;
for (CartBean.Cart.Product product : cart.list) {
product.isProductChecked=true;
}
}
}else{
for (CartBean.Cart cart : carts) {
cart.isChecked=false;
for (CartBean.Cart.Product product : cart.list) {
product.isProductChecked=false;
}
}
}
cartAdapter.notifyDataSetChanged();
}
});
}
//回调成功
@Override
public void success(List<CartBean.Cart> list) {
if (list!=null){
carts=list;
cartAdapter = new CartAdapter(this, list);
rv.setAdapter(cartAdapter);
}
}
@Override
public void failure(String msg) {
}
}
activity_cart去结算
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView 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"
app:cardElevation="5dp"
app:cardCornerRadius="10dp"
app:cardBackgroundColor="#ffffff"
tools:context=".activity.CartActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥:100000"
android:layout_centerVertical="true"/>
<Button
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="去结算"
android:background="@drawable/shape"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:textColor="#ffffff"
/>
</RelativeLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
activity_cart_item 一级列表
<android.support.v7.widget.CardView 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="wrap_content"
android:layout_margin="10dp"
app:cardElevation="5dp"
app:cardCornerRadius="10dp"
android:padding="10dp"
app:cardBackgroundColor="#ffffff"
tools:context=".activity.CartActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品名称"/>
</LinearLayout>
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.jcodecraeer.xrecyclerview.XRecyclerView>
</LinearLayout>
</android.support.v7.widget.CardView>
product_item_layout 二级列表
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/left_layout"
android:layout_width="wrap_content"
android:layout_toLeftOf="@+id/right_layout"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="horizontal"
android:layout_alignParentLeft="true"
>
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<ImageView
android:id="@+id/iv_product"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:lines="2"
android:ellipsize="end"
android:text="商品标题"/>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="价格"
android:textSize="14sp"
android:textColor="#ff00"
android:lines="2"
android:ellipsize="end"
android:layout_marginLeft="10dp"
/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>