效果图
第一个适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
List<DataBean> list;
Context context;
ViewActivity activity;
public MyAdapter(List<DataBean> list, Context context) {
this.list = list;
this.context = context;
activity = (ViewActivity) context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.layout_item, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
viewHolder.name.setText(list.get(i).getSellerName());
viewHolder.checkBox1.setChecked(list.get(i).isSelect());
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
viewHolder.recyclerView.setLayoutManager(layoutManager);
final MyItemAdapter adapter = new MyItemAdapter(list.get(i).getList(),context);
viewHolder.recyclerView.setAdapter(adapter);
//第二层CheckBox改变状态监听,
viewHolder.checkBox1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//调用activity方法使子CheckBox改变
activity.setCheckAll(i,-1,viewHolder.checkBox1.isChecked());
}
});
}
@Override
public int getItemCount() {
if (list.size() != 0){
return list.size();
}
return 0;
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView name;
public CheckBox checkBox1;
RecyclerView recyclerView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name_id);
checkBox1 = itemView.findViewById(R.id.checkbox1_id);
recyclerView = itemView.findViewById(R.id.recycler_id);
}
}
}
第二个适配器
public class MyItemAdapter extends RecyclerView.Adapter<MyItemAdapter.ViewHolder> {
List<ListBean> list;
Context context;
ViewActivity activity;
public MyItemAdapter(List<ListBean> list, Context context) {
this.list = list;
this.context = context;
activity = (ViewActivity) context;
}
//加载布局
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.layout_item1, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
viewHolder.title.setText(list.get(i).getTitle());
viewHolder.price.setText(list.get(i).getPrice()+"");
viewHolder.num.setText(list.get(i).getNum()+"");
viewHolder.checkBox2.setChecked(list.get(i).isSelects());
Glide.with(context).load(list.get(i).getImages()).into(viewHolder.image);
//最里层CheckBox状态改变监听
viewHolder.checkBox2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewHolder.checkBox2.isChecked() == false){
int n = activity.getValue(viewHolder.checkBox2.isChecked(),list.get(i));
activity.setCheckAll(n,i,viewHolder.checkBox2.isChecked());
activity.check.setChecked(false);
}else {
int n = activity.getValue(viewHolder.checkBox2.isChecked() ,list.get(i) );
activity.setCheckAll(n , i ,viewHolder.checkBox2.isChecked());
}
}
});
//数量加
viewHolder.jia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String n = viewHolder.num.getText().toString();
int j = Integer.parseInt(n);
j++;
list.get(i).setNum(j);
activity.total();
}
});
//数量减
viewHolder.jian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int j = Integer.parseInt(viewHolder.num.getText().toString());
j--;
if (j > 0){
list.get(i).setNum(j);
activity.total();
}else {
}
}
});
}
@Override
public int getItemCount() {
if (list.size() != 0){
return list.size();
}
return 0;
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView title,num,price;
ImageView image;
CheckBox checkBox2;
Button jia,jian;
public ViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.title_id);
num = itemView.findViewById(R.id.num_id);
image = itemView.findViewById(R.id.image_id);
price = itemView.findViewById(R.id.price_id);
checkBox2 = itemView.findViewById(R.id.checkbox2_id);
jia = itemView.findViewById(R.id.jia);
jian = itemView.findViewById(R.id.jian);
}
}
}
activity
public class ViewActivity extends AppCompatActivity implements MyInterface.ViewInterface {
MyInterface.PresenterInterface presenterInterface;
RecyclerView recyclerView;
List<DataBean> list = new ArrayList<>();
MyAdapter adapter;
public CheckBox check;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
recyclerView = findViewById(R.id.recyclerView_id);
presenterInterface = new MyPresenter<>(this);
check = findViewById(R.id.check_id);
textView = findViewById(R.id.total_id);
init();
}
private void init() {
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
adapter = new MyAdapter(list,this);
recyclerView.setAdapter(adapter);
presenterInterface.toModel();
//全选反选
check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (check.isChecked()){
setCheckAll(true);
total();
}else {
setCheckAll(false);
total();
}
}
});
}
//根据最外层CheckBox的选中状态,遍历改变第二层的选中状态
private void setCheckAll(boolean b) {
for (int i = 0; i < list.size(); i++) {
list.get(i).setSelect(b);
//子集合
for (int j = 0; j < list.get(i).getList().size(); j++) {
list.get(i).getList().get(j).setSelects(b);
}
}
}
/**
* @param i 商家的下标
* @param tag 商家中孩子的下标,默认值位-1
* @param b 是否为选中状态
*/
//
public void setCheckAll(int i,int tag,boolean b){
if (tag != -1){
list.get(i).getList().get(tag).setSelects(b);
boolean flag = true;
//遍历当前集合中的数据
for (int j = 0; j < list.get(i).getList().size(); j++) {
//如果没有selects值为false就使上一层CheckBox选中状态为true
if (!list.get(i).getList().get(j).isSelects()){
flag = false;
}
}
//商家的选中状态
list.get(i).setSelect(flag);
}else {
list.get(i).setSelect(b);
for (int j = 0; j < list.get(i).getList().size(); j++) {
list.get(i).getList().get(j).setSelects(b);
}
}
isCheck();
total();
}
//当对里面的CheckBox进行操作时 判断最外层CheckBox是否选中
public void isCheck(){
boolean flag = true;
for (int i = 0; i < list.size(); i++) {
if (!list.get(i).isSelect()){
flag = false;
}
}
check.setChecked(flag);
}
//计算总价
public void total(){
int sum = 0;
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.get(i).getList().size(); j++) {
if (list.get(i).getList().get(j).isSelects()){
int price = list.get(i).getList().get(j).getPrice();
int num = list.get(i).getList().get(j).getNum();
sum += price * num;
}
}
}
textView.setText(sum+"");
adapter.notifyDataSetChanged();
}
/**
*
* @param b 最里层CheckBox点击后的选中状态
* @param o 当前条目的上一层集合
* @return
*/
//获得商家的下标
public int getValue(boolean b,Object o){
ListBean listBean = (ListBean) o;
int n = 0;
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.get(i).getList().size(); j++) {
ListBean bean = list.get(i).getList().get(j);
if (bean.equals(listBean)){
bean.setSelects(b);
n = i;
}
}
}
return n;
}
//获得数据
@Override
public void reFreDisplay(Object object) {
MyBean bean = (MyBean) object;
list.addAll(bean.getData());
//list.remove(0);
adapter.notifyDataSetChanged();
}
//内存释放
@Override
protected void onDestroy() {
super.onDestroy();
presenterInterface.onDestroy();
presenterInterface = null;
}
}