#activity
public class CartFragment extends Fragment implements CartContract.ICartView,CartCallback {
private XRecyclerView xrc;
private CheckBox checkbox;
private List<CartBean.DataBean> cart;
private CartAdapter cartAdapter;
private TextView tv_price;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.cartfragment,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this,view);
xrc = view.findViewById(R.id.xrc);
tv_price = view.findViewById(R.id.tv_price);
checkbox = view.findViewById(R.id.checkbox);
cart = new ArrayList<>();
checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
for (CartBean.DataBean dataBean : cart) {
dataBean.isChecked = true;
for (CartBean.DataBean.Product product : dataBean.list) {
product.isProductChecked = true;
}
}
}else {
for (CartBean.DataBean dataBean : cart) {
dataBean.isChecked = false;
for (CartBean.DataBean.Product product : dataBean.list) {
product.isProductChecked = false;
}
}
}
cartAdapter.notifyDataSetChanged();
getTotalprice();
}
});
initData();
}
private void initData() {
CartPersenter cartPersenter = new CartPersenter(this);
HashMap<String, String> map = new HashMap<>();
map.put("uid","71");
cartPersenter.getList(map);
}
@Override
public void onFail(String msg) {
}
@Override
public void onSuccess(List<CartBean.DataBean> list) {
cart = list;
xrc.setLayoutManager(new LinearLayoutManager(getActivity()));
cartAdapter = new CartAdapter(getActivity(),cart);
cartAdapter.setCartCallback(this);
xrc.setAdapter(cartAdapter);
}
public void getTotalprice(){
double totalprice = 0;
for (CartBean.DataBean dataBean : cart) {
for (CartBean.DataBean.Product product : dataBean.list) {
if (product.isProductChecked){
totalprice+=product.price*product.productNum;
}
}
}
tv_price.setText("¥:"+totalprice);
}
@Override
public void notifyUIcart() {
getTotalprice();
}
}
#契约类
public interface CartContract {
public abstract class ICartPersenter{
public abstract void getList(HashMap<String,String> map);
}
interface ICartModel{
void getList(HashMap<String, String> map, RequestCallback requestCallback);
}
interface ICartView{
void onFail(String msg);
void onSuccess(List<CartBean.DataBean> list);
}
}
#p
public class CartPersenter extends CartContract.ICartPersenter {
private CartModel cartModel;
private CartContract.ICartView iCartView;
public CartPersenter(CartContract.ICartView iCartView) {
this.cartModel = new CartModel();
this.iCartView = iCartView;
}
@Override
public void getList(HashMap<String, String> map) {
if (cartModel!=null){
cartModel.getList(map, new RequestCallback() {
@Override
public void onFailreq(String msg) {
if (iCartView!=null){
iCartView.onFail(msg);
}
}
@Override
public void onSuccessreq(String result) {
CartBean cartBean = new Gson().fromJson(result, CartBean.class);
List<CartBean.DataBean> data = cartBean.data;
if (iCartView!=null){
iCartView.onSuccess(data);
}
}
});
}
}
}
#一级adapter
public class CartAdapter extends XRecyclerView.Adapter<CartAdapter.ViewHolder> implements CartItemCallback {
private Context context;
private List<CartBean.DataBean> list;
public CartAdapter(Context context, List<CartBean.DataBean> list) {
this.context = context;
this.list = list;
}
private CartCallback cartCallback;
public void setCartCallback(CartCallback cartCallback) {
this.cartCallback = cartCallback;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.cart_layout, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(inflate);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
final CartBean.DataBean dataBean = list.get(i);
for (CartBean.DataBean.Product product : dataBean.list) {
product.pos = i;
}
viewHolder.checkbox.setChecked(dataBean.isChecked);
viewHolder.re.setLayoutManager(new LinearLayoutManager(context));
final CartItemAdapter cartItemAdapter = new CartItemAdapter(context,list.get(i).list);
cartItemAdapter.setCartItemCallback(this);
viewHolder.re.setAdapter(cartItemAdapter);
viewHolder.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dataBean.isChecked = viewHolder.checkbox.isChecked();
for (CartBean.DataBean.Product product : dataBean.list) {
product.isProductChecked = dataBean.isChecked;
}
notifyDataSetChanged();
if (cartCallback!=null){
cartCallback.notifyUIcart();
}
}
});
}
@Override
public int getItemCount() {
return list==null?0:list.size();
}
@Override
public void notifyItem(boolean isChecked, int postion) {
list.get(postion).isChecked = isChecked;
notifyDataSetChanged();
if (cartCallback!=null){
cartCallback.notifyUIcart();
}
}
@Override
public void notifyNum() {
if (cartCallback!=null){
cartCallback.notifyUIcart();
}
}
class ViewHolder extends RecyclerView.ViewHolder{
CheckBox checkbox;
RecyclerView re;
public ViewHolder(@NonNull View itemView) {
super(itemView);
checkbox = itemView.findViewById(R.id.checkbox);
re = itemView.findViewById(R.id.re);
}
}
}
#二级adapter
public class CartItemAdapter extends XRecyclerView.Adapter<CartItemAdapter.ViewHolder> {
private Context context;
private List<CartBean.DataBean.Product> list;
public CartItemAdapter(Context context, List<CartBean.DataBean.Product> list) {
this.context = context;
this.list = list;
}
private CartItemCallback cartItemCallback;
public void setCartItemCallback(CartItemCallback cartItemCallback) {
this.cartItemCallback = cartItemCallback;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.cart_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(inflate);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
final CartBean.DataBean.Product product = list.get(i);
viewHolder.cb_box.setChecked(product.isProductChecked);
viewHolder.tv_name.setText(product.title);
viewHolder.tv_price.setText(product.price+"");
String[] split = product.images.split("\\|");
Glide.with(context).load(split[0]).into(viewHolder.iv_img);
viewHolder.addmus.setAddMusCallback(new AddmusView.AddMusCallback() {
@Override
public void getNum(int num) {
product.productNum = num;
if (cartItemCallback!=null){
cartItemCallback.notifyNum();
}
}
});
viewHolder.cb_box.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!viewHolder.cb_box.isChecked()){
product.isProductChecked=false;
if (cartItemCallback!=null){
cartItemCallback.notifyItem(false,product.pos);
}
}else {
product.isProductChecked = true;
cartItemCallback.notifyNum();
for (CartBean.DataBean.Product product : list) {
if (!viewHolder.cb_box.isChecked()){
product.isProductChecked=false;
if (cartItemCallback!=null){
cartItemCallback.notifyItem(false,product.pos);
}
return;
}
}
boolean temp=true;
for (CartBean.DataBean.Product product : list) {
if (!product.isProductChecked){
temp = false;
}
}
if (temp){
if (cartItemCallback!=null){
cartItemCallback.notifyItem(true,product.pos);
}
}
}
}
});
}
@Override
public int getItemCount() {
return list==null?0:list.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
TextView tv_name,tv_price;
ImageView iv_img;
CheckBox cb_box;
AddmusView addmus;
public ViewHolder(@NonNull View itemView) {
super(itemView);
iv_img = itemView.findViewById(R.id.iv_img);
tv_name = itemView.findViewById(R.id.tv_name);
tv_price = itemView.findViewById(R.id.tv_price);
cb_box = itemView.findViewById(R.id.cb_box);
addmus = itemView.findViewById(R.id.addmus);
}
}
}
#一级Callback
public interface CartCallback {
void notifyUIcart();
}
#二级Callback
public interface CartItemCallback {
void notifyItem(boolean isChecked,int postion);
void notifyNum();
}
#加减自定义view
public class AddmusView extends LinearLayout {
private TextView jian,add;
private EditText ed_num;
private int num = 1;
public AddmusView(Context context) {
this(context,null);
}
public AddmusView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public AddmusView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(final Context context) {
View inflate = LayoutInflater.from(context).inflate(R.layout.add_mus, this, true);
add = inflate.findViewById(R.id.add);
jian = inflate.findViewById(R.id.jian);
ed_num = inflate.findViewById(R.id.ed_num);
ed_num.setText("1");
jian.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
num--;
if (num==0){
num=1;
Toast.makeText(context,"不能再减了",Toast.LENGTH_SHORT).show();
}
ed_num.setText(num+"");
if (addMusCallback!=null){
addMusCallback.getNum(num);
}
}
});
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
num++;
ed_num.setText(num+"");
if (addMusCallback!=null){
addMusCallback.getNum(num);
}
}
});
}
private AddMusCallback addMusCallback;
public void setAddMusCallback(AddMusCallback addMusCallback) {
this.addMusCallback = addMusCallback;
}
public interface AddMusCallback {
void getNum(int num);
}
}