XRecyclerView+MVP+全选全不选+接口回调+购物车二级列表

//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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值