二级列表购物车

《依赖》
implementation ‘com.squareup.retrofit2:adapter-rxjava2:2.4.0’
implementation ‘com.squareup.retrofit2:converter-gson:2.4.0’
implementation ‘io.reactivex.rxjava2:rxandroid:2.1.0’
implementation ‘com.android.support:recyclerview-v7:28.0.0’
implementation ‘com.facebook.fresco:fresco:1.13.0’
《布局》

《activity_main》

<!--用来展示商家的-->
<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/layout" />

<RelativeLayout
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true">

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:text="全选" />

    <TextView
        android:id="@+id/tv_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/checkbox"
        android:text="0.0"
        android:textColor="#d43c3c" />

    <RelativeLayout
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:background="#d43c3c">

        <TextView
            android:id="@+id/tv_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="去结算(0)"
            android:textColor="#ffffff" />
    </RelativeLayout>

</RelativeLayout>

《商家列表显示布局》

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/checkbox" />
</RelativeLayout>

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_child"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/layout" />

《子布局显示所有数据》

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_marginTop="10dp">

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true" />

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/simple"
        android:layout_width="100dp"
        android:layout_height="80dp"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/checkbox"
        app:placeholderImage="@mipmap/ic_launcher" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/simple">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1233" />

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

            <TextView
                android:id="@+id/tv_price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="123"
                android:textColor="#d43c3c" />

            <com.bawei.mymvp.view.ViewApp
                android:id="@+id/view_app"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true" />
        </RelativeLayout>
    </RelativeLayout>
</RelativeLayout>

《Fresco图片控件使用时的调用与自定义缓存路径》
——>然后在清单文件中name调用此类

public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
// Fresco.initialize(this)不添加缓存路径直接调用使用
Fresco.initialize(this, ImagePipelineConfig.newBuilder(App.this)
.setMainDiskCacheConfig(
DiskCacheConfig.newBuilder(this)
//磁盘缓存路径
.setBaseDirectoryPath(new File(Environment.getExternalStorageDirectory().getAbsolutePath())) // 注意Android运行时权限。
.setMaxCacheSize(10 * 1024 * 1024)
.build()
)
.build()
);
}
}

《MainActivity 》
public class MainActivity extends AppCompatActivity implements Views, View.OnClickListener {

private PresenterIml presenterIml;
private RecyclerView recycler;
private CheckBox checkbox;
private TextView num;
private TextView price;
private List<JsonBean.DataBean> list = new ArrayList<>();
private JsonAdapter jsonAdapter;
private CheckBox mcheckbox;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    presenterIml = new PresenterIml(new ModelIml(), this);
    recycler = (RecyclerView) findViewById(R.id.recycler);
    mcheckbox = (CheckBox) findViewById(R.id.checkbox);
    mcheckbox.setOnClickListener(this);
    num = (TextView) findViewById(R.id.tv_num);
    price = (TextView) findViewById(R.id.tv_price);
    presenterIml.get(0, "/ks/product/getCarts?uid=51", null);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    jsonAdapter = new JsonAdapter(this);
    recycler.setLayoutManager(linearLayoutManager);
    recycler.setAdapter(jsonAdapter);

    //接受改变回传过来的数据
    jsonAdapter.setChannerListListener(new JsonAdapter.ChannerListListener() {
        @Override
        public void changeList(List<JsonBean.DataBean> list) {
            float p = 0;
            int allnum = 0;
            int shopCarNum = 0;
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).isChecked()) {
                    shopCarNum++;
                }
                List<JsonBean.DataBean.ListBean> childList = list.get(i).getList();//得到商家下的商品集合

                for (int j = 0; j < childList.size(); j++) {
                    if (childList.get(j).isChecked()) {//必须为选中
                        float q = childList.get(j).getPrice();//取价格
                        int n = childList.get(j).getNum();//取个数
                        allnum = allnum + n;//计算选中的商品个数
                        p = p + (q * n);//计算选中的商品总价
                    }
                }
            }

            if (shopCarNum == list.size()) {//所有的商家选中
                mcheckbox.setChecked(true);
            } else {
                mcheckbox.setChecked(false);
            }

            //设置
            price.setText("去结算(" + p + "¥");
            num.setText(allnum + "件");
        }
    });

}

@Override
public void onClick(View v) {
    int allnum = 0;
    float p = 0;
    switch (v.getId()) {
        case R.id.checkbox://获取外层商家checkbox选择状态
            boolean isChecked = mcheckbox.isChecked();
            for (int i = 0; i < list.size(); i++) {
                list.get(i).setChecked(isChecked);//遍历获取所有商家的状态
                List<JsonBean.DataBean.ListBean> beans = this.list.get(i).getList();//所有商品的集合
                for (int j = 0; j < beans.size(); j++) {
                    beans.get(j).setChecked(isChecked);//遍历获取所有商品的状态
                    int s = beans.get(j).getNum();
                    float q = beans.get(j).getPrice();
                    p = p + (q * s);
                    allnum = allnum + s;
                }
            }
            if (!isChecked) {
                p = 0.0f;
                allnum = 0;
            }
            price.setText("去结算(" + p + "¥");
            num.setText(allnum + "件");
            jsonAdapter.setList(list);//刷新适配器将list集合赋给适配器
            break;
    }


}

@Override
public void success(int type, String data) {

    if (type == 0) {
        JsonBean bean = new Gson().fromJson(data, JsonBean.class);
        list = bean.getData();
        list.remove(0);
        jsonAdapter.setList(list);
    }

}

@Override
public void fail(int type, String error) {

}

}

《主适配器显示商家信息》
public class JsonAdapter extends RecyclerView.Adapter<JsonAdapter.ViewHolder> {
private final Context context;
private List<JsonBean.DataBean> list = new ArrayList<>();

public JsonAdapter(Context context) {
    this.context = context;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = View.inflate(context, R.layout.itme_all, null);
    ViewHolder holder = new ViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
    viewHolder.name.setText(list.get(i).getSellerName());
    viewHolder.checkbox.setChecked(list.get(i).isChecked());

    AllAdapter allAdapter = new AllAdapter(context, list.get(i).getList());
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    viewHolder.recycler.setLayoutManager(linearLayoutManager);
    viewHolder.recycler.setAdapter(allAdapter);

    viewHolder.checkbox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean ischecked = viewHolder.checkbox.isChecked();//获取商家的选中状态
            list.get(i).setChecked(ischecked);//改变商家的状态
            List<JsonBean.DataBean.ListBean> beanList = JsonAdapter.this.list.get(i).getList();//获取所有商品的集合
            for (int j = 0; j < beanList.size(); j++) {
                beanList.get(j).setChecked(ischecked);//遍历更改商品状态
            }

            notifyDataSetChanged();//刷新当前条目
            mChannerListListener.changeList(list);//将遍历改变之后的集合回传个使用页面

        }
    });
}


@Override
public int getItemCount() {
    return list.size();
}

public void setList(List<JsonBean.DataBean> list) {
    this.list = list;
    notifyDataSetChanged();
}


public class ViewHolder extends RecyclerView.ViewHolder {

    CheckBox checkbox;
    TextView name;
    RecyclerView recycler;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        checkbox = (CheckBox) itemView.findViewById(R.id.checkbox);
        name = (TextView) itemView.findViewById(R.id.tv_name);
        recycler = (RecyclerView) itemView.findViewById(R.id.recycler_child);
    }
}

private ChannerListListener mChannerListListener;

public void setChannerListListener(ChannerListListener mChannerListListener) {
    this.mChannerListListener = mChannerListListener;
}

public interface ChannerListListener {
    void changeList(List<JsonBean.DataBean> list);
}

}

《子适配器显示所有商品信息》

public class AllAdapter extends RecyclerView.Adapter<AllAdapter.ViewHolder> {
private final Context context;
private List<JsonBean.DataBean.ListBean> list = new ArrayList<>();

public AllAdapter(Context context, List<JsonBean.DataBean.ListBean> list) {
    this.context = context;
    this.list = list;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = View.inflate(context, R.layout.itme_chilall, null);
    ViewHolder viewHolder = new ViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    viewHolder.checked.setChecked(list.get(i).isChecked());//获取商品选中状态
    viewHolder.price.setText(list.get(i).getPrice() + "");
    viewHolder.simple.setImageURI(list.get(i).getImages());
    viewHolder.title.setText(list.get(i).getTitle());
    int num = list.get(i).getNum();
    viewHolder.viewapp.setNum(num);
}

@Override
public int getItemCount() {
    return list.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    CheckBox checked;
    SimpleDraweeView simple;
    TextView price, title;
    ViewApp viewapp;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        checked = (CheckBox) itemView.findViewById(R.id.checkbox);
        simple = (SimpleDraweeView) itemView.findViewById(R.id.simple);
        title = (TextView) itemView.findViewById(R.id.tv_title);
        price = (TextView) itemView.findViewById(R.id.tv_price);
        viewapp = (ViewApp) itemView.findViewById(R.id.view_app);
    }
}

}

《自定义加减器 ViewApp 》
public class ViewApp extends RelativeLayout {

private TextView jian;
private TextView jia;
private EditText text;

public ViewApp(Context context) {
    super(context);
    init(context);
}

public ViewApp(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
}

private void init(Context context) {

    View view = View.inflate(context, R.layout.itme_add, null);
    jian = (TextView) view.findViewById(R.id.tv_jian);
    jia = (TextView) view.findViewById(R.id.tv_jia);
    text = (EditText) view.findViewById(R.id.ed_text);
    addView(view);
}

public void setNum(int num) {
    text.setText(num + "");
}

}

《效果图》 未写完 加 减数据代码还未写
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值