购物车

接口

http://www.zhaoapi.cn/product/getCarts?uid=71

//自定义组合控件

public class SubView extends LinearLayout {
    private TextView subview_textview_jian;
    private TextView subview_edittext_shu;
    private TextView subview_textview_jia;
    private int number=1;
    //初始化
    public SubView(Context context) {
        this( context, null );
    }

    public SubView(Context context, @Nullable AttributeSet attrs) {
        this( context, attrs, 0 );
    }

    public SubView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super( context, attrs, defStyleAttr );
        View view = View.inflate( getContext(), R.layout.activity_subview, this );
        subview_textview_jian = view.findViewById( R.id.subview_textview_jian );
        subview_edittext_shu = view.findViewById( R.id.subview_edittext_shu );
        subview_textview_jia = view.findViewById( R.id.subview_textview_jia );
        //减的点击
        subview_textview_jian.setOnClickListener( new OnClickListener() {
            @Override
            public void onClick(View view) {
              if (number>1){
                  --number;
                  subview_edittext_shu.setText( number+"" );
                  if (mSubview!=null){
                      mSubview.transmission(number);
                  }
              }

            }
        } );
        //加的点击
        subview_textview_jia.setOnClickListener( new OnClickListener() {
            @Override
            public void onClick(View view) {
                   ++number;
                   subview_edittext_shu.setText( number+"" );
                if (mSubview!=null){
                    mSubview.transmission(number);
                }
            }
        } );

    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
        subview_edittext_shu.setText( number+"" );
    }
    public interface subview{
        void  transmission(int num);
    }
    private subview mSubview;
    public void setSubview(subview subview){
        mSubview=subview;
    }

}

自定义控件xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:id="@+id/subview_textview_jian"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:text="-"
        android:gravity="center"
        />
    <TextView
        android:id="@+id/subview_edittext_shu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/subview_textview_jia"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:text="+"
        android:gravity="center"
        />
</LinearLayout>

mainActivity

public class MainActivity extends AppCompatActivity  {

    private ExpandableListView main_expandblelistviwe;
    private CheckBox main_checkbox;
    private TextView main_textview;
    private Button main_button;
    private ShopAdapter mShopAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        initView();
        initData();
    }
   //逻辑
    private void initData() {
    //retrofit
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl( Connector.Base_Shop )
                .addConverterFactory( GsonConverterFactory.create() )
                .build();
        ShopRetrofit shopRetrofit = retrofit.create( ShopRetrofit.class );
        Call<Shop> getstans = shopRetrofit.getstans();
        //数据解析
        getstans.enqueue( new Callback<Shop>() {
            @Override
            public void onResponse(Call<Shop> call, Response<Shop> response) {
                if (response!=null&&response.isSuccessful()){
                    List<Shop.DataBean> data = response.body().getData();
                    Log.e( "ssssss",data+"" );
                    mShopAdapter = new ShopAdapter(getLayoutInflater(),data);

                    main_expandblelistviwe.setAdapter( mShopAdapter );
                   //接口回调 
                    mShopAdapter.setJiekouhuidao( new ShopAdapter.jiekouhuidao() {
                        @Override
                        //父类的接口回调
                        public void shangjia(int i) {
                            boolean shangjiadanxuanchcked = mShopAdapter.shangjiadanxuanchcked( i );
                            mShopAdapter.shangjiaxuanze( i,!shangjiadanxuanchcked );
                            mShopAdapter.notifyDataSetChanged();
                            shuanxin();
                        }
                        @Override
                        //子类的接口回调
                        public void shangpin(int i, int i1) {
                             mShopAdapter.shangpinxuanze( i,i1 );
                             mShopAdapter.notifyDataSetChanged();
                             shuanxin();
                        }
                        @Override
                        //自定义组合控件的接口回调
                        public void kongjian(int i, int i1, int number) {
                            mShopAdapter.shuliangxuanze( i,i1,number );
                            mShopAdapter.notifyDataSetChanged();
                            shuanxin();
                        }
                    } );
                    //二级列表
                    for(int x = 0 ; x<data.size();x++){
                        main_expandblelistviwe.expandGroup( x );
                    }
                }

            }
            @Override
            public void onFailure(Call<Shop> call, Throwable t) {
                Toast.makeText( MainActivity.this, "请求失败", Toast.LENGTH_SHORT ).show();
            }
        } );
        //全选点击事件
        main_checkbox.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText( MainActivity.this, "ssss", Toast.LENGTH_SHORT ).show();
                boolean shangpindanxuanchecked = mShopAdapter.shangpindanxuanchecked();
                mShopAdapter.quanxuanxuanze( !shangpindanxuanchecked );
                mShopAdapter.notifyDataSetChanged();
                shuanxin();
            }
        } );
    }
  //初始化
    private void initView() {
        main_expandblelistviwe = (ExpandableListView) findViewById( R.id.main_expandblelistviwe );
        main_checkbox = (CheckBox) findViewById( R.id.main_checkbox );
        main_textview = (TextView) findViewById( R.id.main_textview );
        main_button = (Button) findViewById( R.id.main_button );
    }
  //刷新
    private void shuanxin() {

        boolean shangpindanxuanchecked = mShopAdapter.shangpindanxuanchecked();
        //出现过错误
        main_checkbox.setChecked( shangpindanxuanchecked );


        int jisuanshuliangchecked = mShopAdapter.jisuanshuliangchecked();
        int jisuanzongjiachecked = mShopAdapter.jisuanzongjiachecked();
        main_textview.setText( "合计"+jisuanzongjiachecked );
        main_button.setText("结算"+jisuanshuliangchecked );
    }

}

Adapter适配器

public class ShopAdapter extends BaseExpandableListAdapter {
    LayoutInflater layoutInflater;
      List<Shop.DataBean> mdata;


    public ShopAdapter(LayoutInflater layoutInflater, List<Shop.DataBean> data) {
        this.layoutInflater=layoutInflater;
        mdata=data;
    }

    @Override
    public int getGroupCount() {
        return mdata.size();
    }

    @Override
    public int getChildrenCount(int i) {
        return mdata.get( i ).getList().size();
    }

    @Override
    //父布局
    public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
        Viewholder viewholder=null ;
        if (view == null){
            viewholder = new Viewholder();
            view = layoutInflater.inflate( R.layout.activity_viewholder, null );

            viewholder.viewholder_checkbox_shangjiaxuan= view.findViewById( R.id.viewholder_checkbox_shangjiaxuan );
            viewholder.viewholder_textview_shangjia=view.findViewById( R.id.viewholder_textview_shangjia );
            view.setTag( viewholder );
        }else{
            viewholder = (Viewholder)view.getTag();
        }
        viewholder.viewholder_textview_shangjia.setText( mdata.get( i ).getSellerName());
     //初始父类点击
        boolean shangjiadanxuanchcked = shangjiadanxuanchcked( i );

        viewholder.viewholder_checkbox_shangjiaxuan.setChecked(shangjiadanxuanchcked );
       //父类按钮点击跳转
        viewholder.viewholder_checkbox_shangjiaxuan.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              if (mJiekouhuidao!=null){
                  mJiekouhuidao.shangjia(i);
              }
            }
        } );
        return view;
    }

    @Override
    //子类
    public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
        Viewholder1 viewholder1 =null;
        if (view==null){
            viewholder1 = new Viewholder1();
            view = layoutInflater.inflate( R.layout.activity_viewholder1, null );
            viewholder1.viewholder1_checkbox_shangpinxuan  = view.findViewById( R.id.viewholder1_checkbox_shangpinxuan );
            viewholder1.viewholder1_simpledraweeview  = view.findViewById( R.id.viewholder1_simpledraweeview );
            viewholder1.viewholder1_textview_name= view.findViewById( R.id.viewholder1_textview_name );
            viewholder1.viewholder1_textview_price= view.findViewById( R.id.viewholder1_textview_price );
            viewholder1.viewholder1_kongjia = view.findViewById( R.id.viewholder1_kongjia );
            view.setTag( viewholder1 );
        }else{
            viewholder1 = (Viewholder1) view.getTag();
        }

        String images = mdata.get( i ).getList().get( i1 ).getImages();
        String[] split = images.split( "\\|" );
        viewholder1.viewholder1_simpledraweeview.setImageURI( Uri.parse( split[0] ) );
        viewholder1.viewholder1_textview_name.setText( mdata.get( i ).getList().get( i1 ).getTitle() );
        viewholder1.viewholder1_textview_price.setText( mdata.get( i ).getList().get( i1 ).getPrice() +"");
        
        viewholder1.viewholder1_kongjia.setNumber(mdata.get( i ).getList().get( i1 ).getNum());
        //子类的初始化
        viewholder1.viewholder1_checkbox_shangpinxuan.setChecked( mdata.get( i ).getList().get( i1 ).getSelected()==1 );

        //控件的点击事件并且使用接口回调
        viewholder1.viewholder1_kongjia.setSubview( new SubView.subview() {
            @Override
            public void transmission(int num) {
                if (mJiekouhuidao!=null){
                    mJiekouhuidao.kongjian( i,i1,num );
                }
            }
        } );
        //商品的点击事件
        viewholder1.viewholder1_checkbox_shangpinxuan.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              if (mJiekouhuidao!=null){
                  mJiekouhuidao.shangpin( i,i1 );
              }
    }
} );
        return view;
    }



   //商家的选择
    public boolean shangjiadanxuanchcked(int i){
        Shop.DataBean dataBean = mdata.get( i );
        List<Shop.DataBean.ListBean> list = dataBean.getList();
        for (Shop.DataBean.ListBean listBean : list){
            if (listBean.getSelected()==0){
                return false;
            }
        }
        return true;
    }

    //商品的选择
    public boolean shangpindanxuanchecked(){
        for(int x = 0 ; x<mdata.size();x++){
            Shop.DataBean dataBean = mdata.get( x );
            List<Shop.DataBean.ListBean> list = dataBean.getList();
            for(int i = 0 ; i<list.size();i++){
                if(list.get( i ).getSelected()==0){
                    return false;
                }
            }
        }
        return true;
    }

    //计算数量
    public int jisuanshuliangchecked(){
        int sum = 0;
        for(int x = 0 ; x<mdata.size();x++){
            Shop.DataBean dataBean = mdata.get( x );
            List<Shop.DataBean.ListBean> list = dataBean.getList();
            for(int i = 0 ; i<list.size();i++){
                Shop.DataBean.ListBean listBean = list.get( i );
                if(listBean.getSelected()==1){
                    int num = listBean.getNum();
                    sum += num;
                }
            }
        }
        return sum;
    }
    //计算总价
    public int jisuanzongjiachecked(){
        int price = 0;
        for(int x = 0 ; x<mdata.size();x++){
            Shop.DataBean dataBean = mdata.get( x );
            List<Shop.DataBean.ListBean> list = dataBean.getList();
            for(int i = 0 ; i<list.size();i++){
                Shop.DataBean.ListBean listBean = list.get( i );
                if(listBean.getSelected()==1){
                    int num = listBean.getNum();
                    int price1 = listBean.getPrice();
                    price += num*price1;
                }
            }
        }
        return price;
    }



   //商家选择后
   public void shangjiaxuanze(int i,boolean b){
       Shop.DataBean dataBean = mdata.get( i );
       List<Shop.DataBean.ListBean> list = dataBean.getList();
       for(int x = 0 ; x<list.size();x++){
           //出现过错误
           list.get( x ).setSelected( b? 1 : 0);
       }
   }


    //商品选择后
    public void shangpinxuanze(int i, int i1){
        Shop.DataBean dataBean = mdata.get( i );
        List<Shop.DataBean.ListBean> list = dataBean.getList();
        Shop.DataBean.ListBean listBean = list.get( i1 );
        listBean.setSelected( listBean.getSelected()==0?1:0 );
        }



    //数量

   public void shuliangxuanze(int i,int i1, int number){
       Shop.DataBean dataBean = mdata.get( i );
       List<Shop.DataBean.ListBean> list = dataBean.getList();
       list.get( i1 ).setNum( number );
   }

  //全选
  public void quanxuanxuanze(boolean b){
       for(int x = 0 ; x<mdata.size();x++){
           Shop.DataBean dataBean = mdata.get( x );
           List<Shop.DataBean.ListBean> list = dataBean.getList();
           for (int i=0;i<list.size();i++){
               list.get( i ).setSelected( b ? 1 : 0 );
           }
       }
  }



    class Viewholder{
        private CheckBox viewholder_checkbox_shangjiaxuan;
        private TextView viewholder_textview_shangjia;
    }
    class Viewholder1{
        private CheckBox viewholder1_checkbox_shangpinxuan;
        private TextView viewholder1_textview_name;
        private TextView viewholder1_textview_price;
        private SimpleDraweeView viewholder1_simpledraweeview;
        private SubView viewholder1_kongjia;
    }




   //接口回调
    public interface jiekouhuidao{
       void shangjia(int i);
       void shangpin(int i,int i1);
       void kongjian(int i,int i1,int number);

   }
   private jiekouhuidao mJiekouhuidao;
   public void setJiekouhuidao(jiekouhuidao jiekouhuidao){
       mJiekouhuidao = jiekouhuidao;
   }
    @Override
    public Object getGroup(int i) {
        return null;
    }

    @Override
    public Object getChild(int i, int i1) {
        return null;
    }

    @Override
    public long getGroupId(int i) {
        return 0;
    }

    @Override
    public long getChildId(int i, int i1) {
        return 0;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }
    @Override
    public boolean isChildSelectable(int i, int i1) {
        return false;
    }
}

父布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <CheckBox
        android:id="@+id/viewholder_checkbox_shangjiaxuan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:layout_marginLeft="50dp"
        />
    <TextView
        android:id="@+id/viewholder_textview_shangjia"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dp"
        android:text="sss"
        />
</LinearLayout>

子类布局

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

    <CheckBox
        android:id="@+id/viewholder1_checkbox_shangpinxuan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        />

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/viewholder1_simpledraweeview"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_marginLeft="20dp"
        android:scaleType="centerCrop"
        android:src="@color/colorPrimary" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:id="@+id/viewholder1_textview_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="2"
            android:text="商品标题" />

        <TextView
            android:id="@+id/viewholder1_textview_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="¥0.0" />
    </LinearLayout>
     <com.example.shopcart.custom.SubView
         android:id="@+id/viewholder1_kongjia"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"></com.example.shopcart.custom.SubView>

</LinearLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值