移动端购物车逻辑之接口回调

不说话,先上图:

项目中经常需要实现这样的逻辑:

点击全选按钮,实时显示物料种类数和总数;

点击加减按钮,总数实时增减;

再次点击全选按钮,全部不选。

主要的难点在于接口回调的使用,上代码:

activity代码:

package com.example.michael.cartdemo.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import com.example.michael.cartdemo.adapter.CartAdapter;
import com.example.michael.cartdemo.R;
import com.example.michael.cartdemo.bean.ItemBean;
import com.example.michael.cartdemo.interf.CheckInterface;
import com.example.michael.cartdemo.interf.ModifyCountInterface;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity
        implements View.OnClickListener,CheckInterface,ModifyCountInterface{

    private ListView lvCart;
    private CheckBox cbChooseAll;
    private TextView tvMaterialNum;
    private TextView tvAllNum;

    private int totalCount;
    private int totalNum;

    private List<ItemBean> infos = new ArrayList<>();
    private CartAdapter cartAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        initView();
        initData();
        initAdapter();
        initListener();
    }

    private void initListener() {
        cbChooseAll.setOnClickListener(this);
    }

    private void initAdapter() {
        cartAdapter = new CartAdapter(infos);
        cartAdapter.setCheckInterface(this);
        cartAdapter.setModifyCountInterface(this);
        lvCart.setAdapter(cartAdapter);
    }

    private void initData() {
        for (int i = 0; i < 3; i++) {
            ItemBean itemBean = new ItemBean();
            itemBean.setInvName("家电家具大数据跨境电商大数据技术监督局环境多说几句方式见附件1电视电话环境");
            itemBean.setInvCode("1999266555");
            itemBean.setNum(9);
            itemBean.setSpecification("(4*25)");
            infos.add(itemBean);
        }
    }

    private void initView() {
        lvCart = (ListView) findViewById(R.id.lv_cart);
        cbChooseAll = (CheckBox) findViewById(R.id.cb_choose_all);
        tvMaterialNum = (TextView) findViewById(R.id.tv_material_num);
        tvAllNum = (TextView) findViewById(R.id.tv_all_num);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.cb_choose_all:
               if(infos.size() != 0){
                   if(cbChooseAll.isChecked()){
                       for (int i = 0; i < infos.size(); i++) {
                           infos.get(i).setChecked(true);
                       }
                       cartAdapter.notifyDataSetChanged();
                   }else{
                       for (int i = 0; i < infos.size(); i++) {
                           infos.get(i).setChecked(false);
                       }
                       cartAdapter.notifyDataSetChanged();
                   }
               }
                statistics();
                break;
        }
    }

    private void statistics() {
        totalCount = 0;
        totalNum = 0;
        for (int i = 0; i < infos.size(); i++) {
            ItemBean itemBean = infos.get(i);
            if(itemBean.getChecked()){
                totalNum++;
                totalCount += itemBean.getNum();
            }
        }
        tvMaterialNum.setText(totalNum + "");
        tvAllNum.setText(totalCount + "");
    }

    @Override
    public void checkGroup(int position, boolean isChecked) {
        infos.get(position).setChecked(isChecked);
        if(isAllCheck()){
            cbChooseAll.setChecked(true);
        }else{
            cbChooseAll.setChecked(false);
        }
        cartAdapter.notifyDataSetChanged();
        statistics();
    }

    @Override
    public void doIncrease(int position, View showCountView, boolean isChecked) {
        ItemBean itemBean = infos.get(position);
        int currentCount = itemBean.getNum();
        currentCount++;
        itemBean.setNum(currentCount);
        ((EditText)showCountView).setText(currentCount + "");
        cartAdapter.notifyDataSetChanged();
        statistics();
    }

    @Override
    public void doDecrease(int position, View showCountView, boolean isChecked) {
        ItemBean itemBean = infos.get(position);
        int currentCount = itemBean.getNum();
        if(currentCount == 1){
            return;
        }
        currentCount--;
        itemBean.setNum(currentCount);
        ((EditText)showCountView).setText(currentCount + "");
        cartAdapter.notifyDataSetChanged();
        statistics();
    }

    public boolean isAllCheck() {
        for (int i = 0; i < infos.size(); i++) {
            if(!infos.get(i).getChecked()){
                return false;
            }
        }
        return true;
    }

}

adapter代码:

package com.example.michael.cartdemo.adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;

import com.example.michael.cartdemo.R;
import com.example.michael.cartdemo.bean.ItemBean;
import com.example.michael.cartdemo.interf.CheckInterface;
import com.example.michael.cartdemo.interf.ModifyCountInterface;

import java.util.List;

/**
 * Created by Michael on 2017/6/1.
 */

public class CartAdapter extends BaseAdapter {

    private CheckInterface checkInterface;
    private ModifyCountInterface modifyCountInterface;

    public void setCheckInterface(CheckInterface checkInterface) {
        this.checkInterface = checkInterface;
    }

    public void setModifyCountInterface(ModifyCountInterface modifyCountInterface) {
        this.modifyCountInterface = modifyCountInterface;
    }

    private List<ItemBean> mList;

    public CartAdapter(List<ItemBean> list) {
        mList = list;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if(convertView == null){
            convertView = LayoutInflater
                    .from(parent.getContext())
                    .inflate(R.layout.item_cart_adapter,null);
            holder = new ViewHolder();
            holder.tvInvName = (TextView) convertView.findViewById(R.id.tv_inv_name);
            holder.tvInvCode = (TextView) convertView.findViewById(R.id.tv_inv_code);
            holder.tvSpecification = (TextView) convertView.findViewById(R.id.tv_specification);
            holder.etNum = (EditText) convertView.findViewById(R.id.et_num);
            holder.cbItemCheck = (CheckBox) convertView.findViewById(R.id.cb_item_check);
            holder.etMinus = (EditText) convertView.findViewById(R.id.et_minus);
            holder.etAdd = (EditText) convertView.findViewById(R.id.et_add);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        holder.etNum.setText(mList.get(position).getNum() + "");
        holder.cbItemCheck.setChecked(mList.get(position).getChecked());

        holder.cbItemCheck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mList.get(position).setChecked(((CheckBox)v).isChecked());
                checkInterface.checkGroup(position,((CheckBox)v).isChecked());
            }
        });

        holder.etMinus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                modifyCountInterface
                        .doDecrease(position,holder.etNum,holder.cbItemCheck.isChecked());
            }
        });

        holder.etAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                modifyCountInterface
                        .doIncrease(position,holder.etNum,holder.cbItemCheck.isChecked());
            }
        });

        return convertView;
    }

    class ViewHolder {
        public TextView tvInvName;
        public TextView tvInvCode;
        public TextView tvSpecification;
        public EditText etNum;
        public CheckBox cbItemCheck;
        public EditText etMinus;
        public EditText etAdd;
    }

}


bean代码:

package com.example.michael.cartdemo.bean;

/**
 * Created by Michael on 2017/6/25.
 */

public class ItemBean {

    private String invName;
    private String invCode;
    private String specification;
    private int num;
    private boolean isChecked;

    public void setInvName(String invName){
        this.invName = invName;
    }

    public String getInvName(){
        return invName;
    }

    public void setInvCode(String invCode){
        this.invCode = invCode;
    }

    public String getInvCode(){
        return invCode;
    }

    public void setSpecification(String specification){
        this.specification = specification;
    }

    public String getSpecification(){
        return specification;
    }

    public void setNum(int num){
        this.num = num;
    }

    public int getNum(){
        return num;
    }

    public void setChecked(boolean isChecked){
        this.isChecked = isChecked;
    }

    public boolean getChecked(){
        return isChecked;
    }

}

接口定义:

package com.example.michael.cartdemo.interf;

/**
 * Created by Michael on 2017/6/25.
 */

public interface CheckInterface {

    void checkGroup(int position, boolean isChecked);

}


package com.example.michael.cartdemo.interf;

import android.view.View;

/**
 * Created by Michael on 2017/6/25.
 */

public interface ModifyCountInterface {

    void doIncrease(int position, View showCountView, boolean isChecked);

    void doDecrease(int position, View showCountView, boolean isChecked);

}


布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/default_margin_50dp"
        android:background="@color/white"
        >

        <!--<View
            android:layout_marginLeft="@dimen/default_margin_45dp"
            android:layout_width="@dimen/default_margin_1.5dp"
            android:layout_height="@dimen/default_margin_30dp"
            android:layout_centerVertical="true"
            android:background="@color/color_cccccc"
            >

        </View>-->

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="购物车"
            android:textSize="@dimen/default_text_size_25sp"
            android:textStyle="bold"
            />

        <View
            android:layout_marginRight="@dimen/default_margin_50dp"
            android:layout_alignParentRight="true"
            android:layout_width="@dimen/default_margin_1.5dp"
            android:layout_height="@dimen/default_margin_30dp"
            android:layout_centerVertical="true"
            android:background="@color/eeeeee"
            >

        </View>

        <ImageButton
            android:id="@+id/ib_del"
            android:layout_alignParentRight="true"
            android:layout_width="@dimen/default_margin_50dp"
            android:layout_height="match_parent"
            android:src="@mipmap/delete_menu"
            android:scaleType="center"
            android:onClick="onPopupClick"
            android:background="@null"
            />

    </RelativeLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="@dimen/default_margin_1dp"
        android:background="@color/color_333333"
        >

    </View>


    <ListView
        android:id="@+id/lv_cart"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        >

    </ListView>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#00000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#03000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#05000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#08000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#0A000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#0D000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#0F000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#12000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#14000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#17000000"
        >

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:background="#1A000000"
        >

    </RelativeLayout>



    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/default_margin_60dp">

        <RelativeLayout
            android:layout_width="@dimen/default_margin_50dp"
            android:layout_height="match_parent">

            <CheckBox
                android:id="@+id/cb_choose_all"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                />

        </RelativeLayout>


        <RelativeLayout
            android:layout_marginLeft="45dp"
            android:layout_width="@dimen/default_margin_40dp"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="全选"
                />

        </RelativeLayout>

        <View
            android:layout_marginLeft="91dp"
            android:layout_width="@dimen/default_margin_1dp"
            android:layout_height="@dimen/default_margin_40dp"
            android:layout_centerVertical="true"
            android:background="@color/eeeeee"
            >

        </View>

        <RelativeLayout
            android:layout_marginLeft="91dp"
            android:layout_width="@dimen/default_margin_50dp"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_centerInParent="true"
                >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="物料"

                    />

                <TextView
                    android:id="@+id/tv_material_num"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="0"
                    android:textColor="#D90000"
                    android:layout_gravity="center_horizontal"
                    />

            </LinearLayout>



        </RelativeLayout>

        <View
            android:layout_marginLeft="141dp"
            android:layout_width="@dimen/default_margin_1dp"
            android:layout_height="@dimen/default_margin_40dp"
            android:background="@color/eeeeee"
            android:layout_centerVertical="true"
            >

        </View>

        <RelativeLayout
            android:layout_marginLeft="141dp"
            android:layout_width="@dimen/default_margin_65dp"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:orientation="vertical"
                >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="数量"
                    android:layout_gravity="center_horizontal"
                    />

                <TextView
                    android:id="@+id/tv_all_num"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="0"
                    android:textColor="#D90000"
                    android:layout_gravity="center_horizontal"
                    />

            </LinearLayout>

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/rl_balance"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="@dimen/default_margin_10dp"
            android:clickable="true"
            android:focusable="true"
            android:layout_width="150dp"
            android:layout_height="@dimen/default_margin_40dp"
            android:background="@drawable/shape_sure"
            >

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                >

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@mipmap/ok"
                    android:layout_centerVertical="true"
                    />

                <TextView
                    android:layout_marginLeft="@dimen/default_margin_25dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="结算"
                    android:textSize="@dimen/default_text_size_18sp"
                    android:layout_centerVertical="true"
                    android:textColor="@color/white"
                    />


            </RelativeLayout>

        </RelativeLayout>


    </RelativeLayout>

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="12"
    >

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2"
        >

        <CheckBox
            android:id="@+id/cb_item_check"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            />

    </RelativeLayout>

    <View
        android:layout_width="@dimen/default_margin_1dp"
        android:layout_height="match_parent"
        android:background="@color/eeeeee"
        >

    </View>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="10"
        android:orientation="vertical"
        >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="@dimen/default_margin_45dp"
            android:padding="@dimen/default_margin_5dp"
            >

            <TextView
                android:id="@+id/tv_inv_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:ellipsize="end"
                android:lines="2"
                android:singleLine="false"
                android:text="户都是大家都是科技第三季度技术监督局苦上加苦待机时间副教授积分开始的解放军家具家电司法局是打发时间"
                />

        </RelativeLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/default_margin_1dp"
            android:background="@color/eeeeee"
            >

        </View>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="120dp">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:weightSum="3"
                >

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:orientation="horizontal"
                    android:weightSum="10"
                    >

                    <RelativeLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        >

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="编"
                            android:layout_centerInParent="true"
                            />

                    </RelativeLayout>

                    <View
                        android:layout_width="@dimen/default_margin_1dp"
                        android:layout_height="match_parent"
                        android:background="@color/eeeeee"
                        >

                    </View>

                    <RelativeLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="9"
                        >

                        <TextView
                            android:id="@+id/tv_inv_code"
                            android:layout_marginLeft="@dimen/default_margin_5dp"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="17992"
                            android:layout_centerVertical="true"
                            />

                    </RelativeLayout>





                </LinearLayout>

                <View
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/default_margin_1dp"
                    android:background="@color/eeeeee"
                    >

                </View>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:orientation="horizontal"
                    android:weightSum="10"
                    >

                    <RelativeLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        >

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="规"
                            android:layout_centerInParent="true"
                            />

                    </RelativeLayout>

                    <View
                        android:layout_width="@dimen/default_margin_1dp"
                        android:layout_height="match_parent"
                        android:background="@color/eeeeee"
                        >

                    </View>

                    <RelativeLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="9"
                        >

                        <TextView
                            android:id="@+id/tv_specification"
                            android:layout_marginLeft="@dimen/default_margin_5dp"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="(4*25)"
                            android:layout_centerVertical="true"
                            />

                    </RelativeLayout>



                </LinearLayout>

                <View
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/default_margin_1dp"
                    android:background="@color/eeeeee"
                    >

                </View>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:orientation="horizontal"
                    android:weightSum="10"
                    >

                    <RelativeLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        >

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="数"
                            android:layout_centerInParent="true"
                            />


                    </RelativeLayout>

                    <View
                        android:layout_width="@dimen/default_margin_1dp"
                        android:layout_height="match_parent"
                        android:background="@color/eeeeee"
                        >

                    </View>

                    <RelativeLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="9"
                        >

                        <LinearLayout
                            android:layout_marginLeft="@dimen/default_margin_5dp"
                            android:layout_width="wrap_content"
                            android:layout_height="@dimen/default_margin_30dp"
                            android:layout_centerVertical="true"
                            android:orientation="horizontal"
                            >

                            <EditText
                                android:id="@+id/et_minus"
                                android:clickable="true"
                                android:focusable="false"
                                android:layout_width="@dimen/default_margin_30dp"
                                android:layout_height="match_parent"
                                android:editable="false"
                                android:gravity="center"
                                android:text="-"
                                android:background="@drawable/shape_set"
                                />

                            <EditText
                                android:id="@+id/et_num"
                                android:layout_width="@dimen/default_margin_45dp"
                                android:layout_height="match_parent"
                                android:background="@drawable/shape_set"
                                android:text="145"
                                android:textColor="#5394C9"
                                android:gravity="center"
                                />

                            <EditText
                                android:id="@+id/et_add"
                                android:clickable="true"
                                android:focusable="false"
                                android:layout_width="@dimen/default_margin_30dp"
                                android:layout_height="match_parent"
                                android:editable="false"
                                android:gravity="center"
                                android:text="+"
                                android:background="@drawable/shape_set"
                                />



                        </LinearLayout>




                    </RelativeLayout>




                </LinearLayout>

            </LinearLayout>


        </RelativeLayout>


    </LinearLayout>





</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <solid android:color="@android:color/transparent" />
    <stroke android:width="@dimen/default_margin_0.5dp"
        android:color="@color/plugin_camera_black"
        >

    </stroke>
</shape>

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >

    <corners android:radius="@dimen/default_margin_4dp">

    </corners>

    <solid android:color="#5394C9">

    </solid>

</shape>



猜你喜欢

转载自blog.csdn.net/qq_36428821/article/details/76922549