详情:关于二级购物车一般逻辑:
第一步:需要定义适配器我也就简单写一下
public class MyOneAdapter extends RecyclerView.Adapter<MyOneAdapter.Holder> {
private List<ShoppingBean.ResultBean> list = new ArrayList<>();
private Context context;
public MyOneAdapter(List<ShoppingBean.ResultBean> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item_list_one, viewGroup, false);
Holder holder = new Holder(inflate);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final Holder holder, final int i) {
ShoppingBean.ResultBean resultBean = list.get(i);
//获取一级目录的名字
holder.name.setText(list.get(i).getCategoryName());
//设置管理器
holder.recyclerViewtwo.setLayoutManager(new LinearLayoutManager(context));
//实例化第二个适配器
final MyTwoAdapter myTwoAdapter = new MyTwoAdapter(context, resultBean.getShoppingCartList());
//把值赋值给xrecy
holder.recyclerViewtwo.setAdapter(myTwoAdapter);
//逻辑判断全选全不选
holder.checkBoxOne.setChecked(list.get(i).isOneCheck());
holder.checkBoxOne.setOnClickListener(null);
holder.checkBoxOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int j = 0; j < list.get(i).getShoppingCartList().size(); j++) {
list.get(i).getShoppingCartList().get(j).setTwoCheck(holder.checkBoxOne.isChecked());
}
//通过list把值的状态设置上去判断是否全选全不选
list.get(i).setOneCheck(holder.checkBoxOne.isChecked());
//刷新适配
notifyDataSetChanged();
//接口回调
onItemClick.getOnItem();
}
});
//通过适配器接口回调
myTwoAdapter.setDat(new MyTwoAdapter.Dat() {
@Override
public void getData() {
//先给设置一个布尔属性让它默认为true
boolean da=true;
//通过for循环判断是否为选中
for (int j = 0; j < list.get(i).getShoppingCartList().size(); j++) {
da=da&list.get(i).getShoppingCartList().get(j).isTwoCheck();
}
//同多选框设置da
holder.checkBoxOne.setChecked(da);
//适配器刷新
myTwoAdapter.notifyDataSetChanged();
//刷新
notifyDataSetChanged();
onItemClick.getOnItem();
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class Holder extends RecyclerView.ViewHolder {
@BindView(R.id.tv_name_one)
TextView name;
@BindView(R.id.cb_check_one)
CheckBox checkBoxOne;
@BindView(R.id.my_recy_two)
RecyclerView recyclerViewtwo;
public Holder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this,itemView);
}
}
//接口回调
public interface OnItemClick{
void getOnItem();
}
private OnItemClick onItemClick;
public void setOnItemClick(OnItemClick onItemClick) {
this.onItemClick = onItemClick;
}
}
第二步:获取第二个适配器
public class MyTwoAdapter extends RecyclerView.Adapter<MyTwoAdapter.Holder> {
private Context context;
private List<ShoppingBean.ResultBean.ShoppingCartListBean> mlist = new ArrayList<>();
public MyTwoAdapter(Context context, List<ShoppingBean.ResultBean.ShoppingCartListBean> list) {
this.context = context;
this.mlist = list;
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item_list_two, viewGroup, false);
Holder holder = new Holder(inflate);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final Holder holder, final int i) {
Glide.with(context).load(mlist.get(i).getPic()).into(holder.imageView1);
holder.textView1.setText(mlist.get(i).getCommodityName());
holder.pricetwo.setText(mlist.get(i).getPrice()+"¥"+"");
//处理逻辑
holder.checkBoxTwo.setChecked(mlist.get(i).isTwoCheck());
holder.checkBoxTwo.setOnClickListener(null);
holder.checkBoxTwo.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mlist.get(i).setTwoCheck(holder.checkBoxTwo.isChecked());
//接口回调
dat.getData();
}
});
//自定义View回调处理加减器
holder.View.setnumber(mlist.get(i).getE());
holder.View.setCallBack(new MyView.CallBack() {
@Override
public void getCallBack(int num) {
mlist.get(i).setE(num);
dat.getData();
}
});
}
@Override
public int getItemCount() {
return mlist.size();
}
public class Holder extends RecyclerView.ViewHolder {
@BindView(R.id.iv_imag_two)
ImageView imageView1;
@BindView(R.id.tv_text_two1)
TextView textView1;
@BindView(R.id.tv_text_two2)
TextView pricetwo;
@BindView(R.id.cb_check_two)
CheckBox checkBoxTwo;
@BindView(R.id.my_view_two)
MyView View;
public Holder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this,itemView);
}
}
//接口回调
public interface Dat{
void getData();
}
private Dat dat;
public void setDat(Dat dat) {
this.dat = dat;
}
}
第三步:获取自定义View处理加减器
public class MyView extends LinearLayout implements View.OnClickListener {
private final Button add;
private final Button remove;
private final TextView mNum;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.item_view,this);
add = (Button) findViewById(R.id.bt_Add);
remove = (Button) findViewById(R.id.bt_Remove);
mNum = (TextView) findViewById(R.id.bt_Num);
add.setOnClickListener(this);
remove.setOnClickListener(this);
}
public void setnumber(int number){
mNum.setText(number+"");
}
@Override
public void onClick(View v) {
String s = mNum.getText().toString();
int i = Integer.parseInt(s);
switch (v.getId()){
case R.id.bt_Add:
i++;
mNum.setText(i+"");
callBack.getCallBack(i);
break;
case R.id.bt_Remove:
if (i>1){
i--;
mNum.setText(i+"");
callBack.getCallBack(i);
}else {
Toast.makeText(getContext(), "最小数量为1", Toast.LENGTH_SHORT).show();
}
break;
}
}
//接口回调
public interface CallBack{
void getCallBack(int num);
}
private CallBack callBack;
public void setCallBack(CallBack callBack){
this.callBack = callBack;
}
}
第四步:在Activity页面
//全选反选单个checkBox获取数据
cbeckAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < list.size(); i++) {
list.get(i).setOneCheck(cbeckAll.isChecked());
for (int j = 0; j < list.get(i).getShoppingCartList().size(); j++) {
list.get(i).getShoppingCartList().get(j).setTwoCheck(cbeckAll.isChecked());
}
}
myOneAdapter.notifyDataSetChanged();//刷新
getPreiceAll(list);//获取总价
}
});
//接口回调
myOneAdapter.setOnItemClick(new MyOneAdapter.OnItemClick() {
@Override
public void getOnItem() {
boolean da = true;
for (int i = 0; i < list.size(); i++) {
da = da & list.get(i).isOneCheck();
for (int j = 0; j < list.get(i).getShoppingCartList().size(); j++) {
da = da & list.get(i).getShoppingCartList().get(j).isTwoCheck();
}
}
cbeckAll.setChecked(da);
getPreiceAll(list);
}
});
//在类外边定义私有的方法
//总价
private void getPreiceAll(List<ShoppingBean.ResultBean> data) {
//定义一个类型赋值
double zongjia = 0;
for (int i = 0; i < data.size(); i++) {
for (int j = 0; j < data.get(i).getShoppingCartList().size(); j++) {
if (data.get(i).getShoppingCartList().get(j).isTwoCheck()) {
int i1 = data.get(i).getShoppingCartList().get(j).getPrice() * data.get(i).getShoppingCartList().get(j).getE();
zongjia += i1;
}
}
}
priceAll.setText(zongjia + "");
}
获取第一个布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/cb_check_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_name_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="aa"
/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recy_two"
android:layout_marginLeft="50dp"
android:layout_width="match_parent"
android:padding="10dp"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
第二个布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/cb_check_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/iv_imag_two"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="@mipmap/ic_launcher"
/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_text_two1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="11111"
/>
<TextView
android:id="@+id/tv_text_two2"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_height="wrap_content"
android:textColor="#f00"
android:text="11111"
/>
<com.bawei.wanglongxiang20190702.view.MyView
android:id="@+id/my_view_two"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:gravity="center"
android:layout_height="wrap_content"></com.bawei.wanglongxiang20190702.view.MyView>
</RelativeLayout>
</LinearLayout>
自定义View
<?xml version="1.0" encoding="utf-8"?><Button
android:id="@+id/bt_Add"
android:layout_width="50dp"
android:layout_height="50dp"
android:text="+"
/>
<TextView
android:id="@+id/bt_Num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#f00"
android:text="1"
/>
<Button
android:id="@+id/bt_Remove"
android:layout_width="50dp"
android:layout_height="50dp"
android:text="-"
/>