接口
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>