1.第一个RecyclerView布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/layout">
</android.support.v7.widget.RecyclerView>
<RelativeLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<CheckBox
android:id="@+id/checkbox_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="全选"/>
<TextView
android:id="@+id/price_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/checkbox_all"
android:text="合计:"/>
<RelativeLayout
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:background="#d43c3c">
<TextView
android:id="@+id/money"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="去结算"
android:textColor="#ffffff"
/>
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
2.activity或者fragment的方法
package com.example.liangwc.view.fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import com.example.liangwc.R;
import com.example.liangwc.model.bean.GoodBean;
import com.example.liangwc.presenter.GoodPresenter;
import com.example.liangwc.view.adapter.MyAdapter;
import com.example.liangwc.view.interfaces.IGoodView;
import java.util.List;
public class FragGwc extends BaseFragment implements IGoodView<GoodBean> {
private RecyclerView recycler;
private CheckBox checkBox_all;
private TextView price_all;
private TextView money;
private GoodPresenter goodPresenter;
private MyAdapter myAdapter;
private List<GoodBean.DataBean> data;
@Override
protected int bindLayout() {
return R.layout.fraggwc;
}
@Override
protected void initView() {
recycler = getActivity().findViewById(R.id.recycler);
checkBox_all = getActivity().findViewById(R.id.checkbox_all);
price_all = getActivity().findViewById(R.id.price_all);
money = getActivity().findViewById(R.id.money);
}
@Override
protected void initData() {
goodPresenter = new GoodPresenter();
goodPresenter.loadDataGood();
goodPresenter.setView(this);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(linearLayoutManager.VERTICAL);
recycler.setLayoutManager(linearLayoutManager);
myAdapter = new MyAdapter(getActivity());
recycler.setAdapter(myAdapter);
//全选
checkBox_all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean checked = checkBox_all.isChecked();
float allprice=0;
int allNum=0;
for (int i = 0; i < data.size(); i++) {
data.get(i).setChecked(checked);
List<GoodBean.DataBean.ListBean> list = data.get(i).getList();
for (int j = 0; j < list.size(); j++) {
list.get(j).setChecked(checked);
if (checked){//选中计算总价
float price = list.get(j).getPrice();
int num = list.get(j).getNum();
allprice=allprice+price*num;
allNum=allNum+num;
}else{
allNum=0;
allprice=0;
}
}
}
price_all.setText(allprice+"");
money.setText("去结算("+allNum+")");
myAdapter.setData(data);
}
});
myAdapter.setOnCallBackListener(new MyAdapter.OnCallBackListener() {
@Override
public void changeData(List<GoodBean.DataBean> datalist) {
float allprice=0;
int allNum=0;
int xuan=0;
for (int i = 0; i < datalist.size(); i++) {
boolean checked = datalist.get(i).isChecked();
if (checked){
xuan++;
List<GoodBean.DataBean.ListBean> listC = datalist.get(i).getList();
for (int j = 0; j < listC.size(); j++) {
float price = listC.get(j).getPrice();
int num = listC.get(j).getNum();
allprice = allprice + price * num;
allNum = allNum + num;
}
}else {//商家未选中,有可能商家里面的商品选中了
List<GoodBean.DataBean.ListBean> listC = datalist.get(i).getList();
for (int j = 0; j < listC.size(); j++) {
if (listC.get(j).isChecked()) {
float price = listC.get(j).getPrice();
int num = listC.get(j).getNum();
allprice = allprice + price * num;
allNum = allNum + num;
}
}
}
if (xuan==datalist.size()){
checkBox_all.setChecked(true);
}else{
checkBox_all.setChecked(false);
}
price_all.setText(allprice + "");//设置总价
money.setText("去结算(" + allNum + ")");//设置数量
}
}
});
}
@Override
protected void bindEvent() {
}
@Override
public void onSuccess(GoodBean goodBean) {
if (goodBean!=null){
data = goodBean.getData();
myAdapter.setData(data);
}
}
@Override
public void onError(String err) {
}
}
3.父类的adapter
package com.example.liangwc.view.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import com.example.liangwc.R;
import com.example.liangwc.model.bean.GoodBean;
import java.util.ArrayList;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyAdapterViewHolder> {
private Context context;
private List<GoodBean.DataBean> datalist=new ArrayList<>();
private ZiAdapter ziAdapter;
public MyAdapter(Context context) {
this.context=context;
}
@NonNull
@Override
public MyAdapter.MyAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=View.inflate(context,R.layout.fu_itme,null);
MyAdapterViewHolder myAdapterViewHolder = new MyAdapterViewHolder(view);
return myAdapterViewHolder;
}
@Override
public void onBindViewHolder(@NonNull final MyAdapter.MyAdapterViewHolder myAdapterViewHolder, final int i) {
myAdapterViewHolder.f_title.setText(datalist.get(i).getSellerName());
myAdapterViewHolder.f_checkbox.setChecked(datalist.get(i).isChecked());
List<GoodBean.DataBean.ListBean> list = datalist.get(i).getList();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
linearLayoutManager.setOrientation(linearLayoutManager.VERTICAL);
myAdapterViewHolder.z_recycler.setLayoutManager(linearLayoutManager);
ziAdapter = new ZiAdapter(context);
ziAdapter.setData(list);
myAdapterViewHolder.z_recycler.setAdapter(ziAdapter);
//父类全选反选
myAdapterViewHolder.f_checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean checked = myAdapterViewHolder.f_checkbox.isChecked();
datalist.get(i).setChecked(checked);
List<GoodBean.DataBean.ListBean> beans = datalist.get(i).getList();
for (int i = 0; i < beans.size(); i++) {
beans.get(i).setChecked(checked);
}
if (mOnCallBackListener!=null){
mOnCallBackListener.changeData(datalist);
}
notifyDataSetChanged();
}
});
//子类商品是不是全部选中
ziAdapter.setOnCallBackListener(new ZiAdapter.OnCallBackListener() {
@Override
public void changeData(List<GoodBean.DataBean.ListBean> listShop) {
int checkedNum=0;
for (int i = 0; i < listShop.size(); i++) {
boolean checked = listShop.get(i).isChecked();
if (checked){
checkedNum++;
}
}
if (checkedNum==listShop.size()){
datalist.get(i).setChecked(true);
}else{
datalist.get(i).setChecked(false);
}
notifyItemChanged(i);
if (mOnCallBackListener!=null){
mOnCallBackListener.changeData(datalist);
}
}
});
}
@Override
public int getItemCount() {
return datalist.size();
}
public void setData(List<GoodBean.DataBean> data) {
if (data!=null){
datalist.clear();
datalist.addAll(data);
notifyDataSetChanged();
}
}
public class MyAdapterViewHolder extends RecyclerView.ViewHolder {
CheckBox f_checkbox;
TextView f_title;
RecyclerView z_recycler;
public MyAdapterViewHolder(@NonNull View itemView) {
super(itemView);
f_title = itemView.findViewById(R.id.f_title);
f_checkbox = itemView.findViewById(R.id.f_checkbox);
z_recycler = itemView.findViewById(R.id.z_recycler);
}
}
private OnCallBackListener mOnCallBackListener;
public void setOnCallBackListener(OnCallBackListener mOnCallBackListener){
this.mOnCallBackListener=mOnCallBackListener;
}
public interface OnCallBackListener{
void changeData(List<GoodBean.DataBean> datalist);
}
}
4.父类的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="30dp">
<CheckBox
android:id="@+id/f_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"/>
<TextView
android:id="@+id/f_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/f_checkbox"/>
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/z_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/layout"></android.support.v7.widget.RecyclerView>
</RelativeLayout>
5.子类的adapter
package com.example.liangwc.view.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.liangwc.R;
import com.example.liangwc.model.bean.GoodBean;
import java.util.ArrayList;
import java.util.List;
public class ZiAdapter extends RecyclerView.Adapter<ZiAdapter.ZiAdapterViewHolder> {
private Context context;
private List<GoodBean.DataBean.ListBean> listdata=new ArrayList<>();
private OnCallBackListener listener;
public ZiAdapter(Context context) {
this.context=context;
}
@NonNull
@Override
public ZiAdapter.ZiAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=View.inflate(context, R.layout.zi_itme,null);
ZiAdapterViewHolder ziAdapterViewHolder = new ZiAdapterViewHolder(view);
return ziAdapterViewHolder;
}
@Override
public void onBindViewHolder(@NonNull final ZiAdapter.ZiAdapterViewHolder ziAdapterViewHolder, final int i) {
ziAdapterViewHolder.z_title.setText(listdata.get(i).getTitle());
ziAdapterViewHolder.z_price.setText("¥"+listdata.get(i).getPrice()+"");
ziAdapterViewHolder.z_count.setText(listdata.get(i).getNum()+"");
Glide.with(context).load(listdata.get(i).getImages()).into(ziAdapterViewHolder.z_image);
ziAdapterViewHolder.z_checkbox.setChecked(listdata.get(i).isChecked());
ziAdapterViewHolder.z_checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean checked = ziAdapterViewHolder.z_checkbox.isChecked();
listdata.get(i).setChecked(checked);
if (listener!=null){
listener.changeData(listdata);
}
}
});
}
@Override
public int getItemCount() {
return listdata.size();
}
public void setData(List<GoodBean.DataBean.ListBean> list) {
if (list!=null){
listdata.clear();
listdata.addAll(list);
notifyDataSetChanged();
}
}
public class ZiAdapterViewHolder extends RecyclerView.ViewHolder {
ImageView z_image;
TextView z_title,z_price,z_count;
CheckBox z_checkbox;
public ZiAdapterViewHolder(@NonNull View itemView) {
super(itemView);
z_checkbox = itemView.findViewById(R.id.z_checkbox);
z_image = itemView.findViewById(R.id.z_image);
z_title = itemView.findViewById(R.id.z_title);
z_price = itemView.findViewById(R.id.z_price);
z_count = itemView.findViewById(R.id.z_count);
}
}
public void setOnCallBackListener(OnCallBackListener listenet){
this.listener=listenet;
}
public interface OnCallBackListener{
void changeData(List<GoodBean.DataBean.ListBean> listShop);
}
}
6.子类的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="100dp">
<CheckBox
android:id="@+id/z_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"/>
<ImageView
android:id="@+id/z_image"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_toRightOf="@+id/z_checkbox"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="3dp"
android:layout_toRightOf="@id/z_image">
<TextView
android:id="@+id/z_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<TextView
android:id="@+id/z_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#f00"/>
<LinearLayout
android:layout_marginLeft="50dp"
android:background="#e5e5e5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_toRightOf="@id/z_price">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="+"/>
<TextView
android:id="@+id/z_count"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="-"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>