外部adapter
public class myadapter extends RecyclerView.Adapter<myadapter.oneholder> {
private Context context;
private List<news.DataBean> list;
private int layoutPosition;
public myadapter(Context context, List<news.DataBean> list) {
this.context = context;
this.list = list;
}
public interface OnCheckedChangeLisenter {
void onChecked(int layoutPosition, boolean isChecked);
void onOutterItemChecked(int layoutPosition, boolean checked);
}
public void setOnCheckedChangeLisenter(OnCheckedChangeLisenter onCheckedChangeLisenter) {
this.onCheckedChangeLisenter = onCheckedChangeLisenter;
}
private RecyclerView rv_innerContainer;
OnCheckedChangeLisenter onCheckedChangeLisenter;
@Override
public oneholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.include1, null);
oneholder oneholder = new oneholder(view);
return oneholder;
}
@Override
public void onBindViewHolder(final oneholder holder, final int position) {
//获取下表
layoutPosition = holder.getLayoutPosition();
//外层被点击之后及时通过接口回调的形式通知全选/反选按钮
holder.cb_02.setOnCheckedChangeListener(null);
holder.cb_02.setChecked(list.get(position).getOutchecked());
holder.cb_02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean ischecked = holder.cb_02.isChecked();
list.get(position).setOutchecked(ischecked);
if (ischecked){
for (int i = 0; i < list.get(holder.getLayoutPosition()).getList().size(); i++) {
list.get(holder.getLayoutPosition()).getList().get(i).setInnerchecked(true);
}
}else {
for (int i = 0; i < list.get(holder.getLayoutPosition()).getList().size(); i++) {
list.get(holder.getLayoutPosition()).getList().get(i).setInnerchecked(false);
}
}
onCheckedChangeLisenter.onOutterItemChecked(holder.getLayoutPosition(),ischecked);
}
});
//全选状态
holder.cb_02.setChecked(list.get(position).getOutchecked());
//赋值
holder.cb_02.setText(list.get(position).getSellerName());
//创建布局管理器
LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
//设置布局
holder.recycleview01.setLayoutManager(manager);
//创建布局
inneradapter inneradapter = new inneradapter(context,list.get(position).getList());
holder.recycleview01.setAdapter(inneradapter);
//接口回传inneradapter
inneradapter.setCheckedChangeListen(new inneradapter.OnCheckedChangeListen() {
@Override
public void onchecked(int layoutPosition, boolean checked) {
//默认定义一个值为false
boolean isAllInnerChecked = true;
for (int i = 0; i <list.get(holder.getLayoutPosition()).getList().size() ; i++) {
boolean innerchecked = list.get(holder.getLayoutPosition()).getList().get(i).getInnerchecked();
isAllInnerChecked=(isAllInnerChecked&innerchecked);
}
//通过条目的设置状态给商家设置状态
holder.cb_02.setChecked(isAllInnerChecked);
//外层条目
list.get(position).setOutchecked(isAllInnerChecked);
//接口回调
onCheckedChangeLisenter.onChecked(holder.getLayoutPosition(),checked);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
//创建视图
class oneholder extends RecyclerView.ViewHolder{
private final CheckBox cb_02;
private final RecyclerView recycleview01;
public oneholder(View itemView) {
super(itemView);
cb_02 = itemView.findViewById(R.id.cb_02);
recycleview01 = itemView.findViewById(R.id.recycleview01);
}
}
}
内部adapter
public class inneradapter extends RecyclerView.Adapter<inneradapter.twoholder> {
private Context context;
private List<news.DataBean.ListBean> list;
public inneradapter(Context context, List<news.DataBean.ListBean> list) {
this.context = context;
this.list = list;
}
@Override
public twoholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.include2, null);
twoholder twoholder = new twoholder(view);
return twoholder;
}
@Override
public void onBindViewHolder(final twoholder holder, final int position) {
TextView num = holder.toggle.findViewById(R.id.num);
holder.toggle.setAddAndMinus(new togglebutton.AddAndMinus() {
@Override
public void add() {
list.get(position).setNum(list.get(position).getNum() + 1);
haha haha = new haha();
// haha.setW(1);
EventBus.getDefault().post(haha);
}
@Override
public void minus() {
list.get(position).setNum(list.get(position).getNum() - 1);
haha haha = new haha();
//haha.setW(1);
EventBus.getDefault().post(haha);
}
});
num.setText(list.get(position).getNum()+"");
holder.cb_03.setChecked(list.get(position).getInnerchecked());
//赋值
holder.price.setText("单价是:"+list.get(position).getPrice());
String[] strings = list.get(position).getImages().split("\\|");
Uri uri = Uri.parse(strings[0]);
holder.my_image_view.setImageURI(uri);
holder.cb_03.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//内部状态更改完
list.get(position).setInnerchecked(holder.cb_03.isChecked());
//接口回传
OnCheckedChangeListen.onchecked(holder.getLayoutPosition(),holder.cb_03.isChecked());
}
});
}
@Override
public int getItemCount() {
return list.size();
}
//创建视图
class twoholder extends RecyclerView.ViewHolder{
private final CheckBox cb_03;
private final SimpleDraweeView my_image_view;
private final TextView price;
private final togglebutton toggle;
public twoholder(View itemView) {
super(itemView);
cb_03 = itemView.findViewById(R.id.cb_03);
my_image_view = itemView.findViewById(R.id.my_image_view);
price = itemView.findViewById(R.id.price);
toggle = itemView.findViewById(R.id.toggle);
}
}
private OnCheckedChangeListen OnCheckedChangeListen;
//接口回调
public interface OnCheckedChangeListen{
void onchecked(int layoutPosition, boolean checked);
}
public void setCheckedChangeListen(OnCheckedChangeListen OnCheckedChangeListen){
this.OnCheckedChangeListen =OnCheckedChangeListen;
}
}
Main
public class MainActivity extends AppCompatActivity {
@BindView(R.id.title1)
TextView title1;
@BindView(R.id.recycleview)
RecyclerView recycleview;
@BindView(R.id.cb_01)
CheckBox cb_01;
@BindView(R.id.zj)
TextView zj;
@BindView(R.id.js)
Button js;
private static final String url="http://www.zhaoapi.cn/product/getCarts?uid=71";
private LinearLayoutManager manager;
private Context context=this;
private List<news.DataBean> data;
private com.example.admin.likaibo.myadapter myadapter;
private com.example.admin.likaibo.news news;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
EventBus.getDefault().register(this);
OkHttpClient build = new OkHttpClient.Builder().build();
Request build1 = new Request.Builder().url(url).build();
build.newCall(build1).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i("xxxxxx","string");
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
final String string = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
Log.i("xxxxxx",string);
news = gson.fromJson(string, news.class);
data = news.getData();
manager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false);
//设置布局
recycleview.setLayoutManager(manager);
//设置适配器
myadapter = new myadapter(context, (ArrayList<news.DataBean>) data);
//设置
recycleview.setAdapter(myadapter);
myadapter.setOnCheckedChangeLisenter(new myadapter.OnCheckedChangeLisenter() {
@Override
public void onChecked(int layoutPosition, boolean isChecked) {
//全局标识
boolean isAllChecked = true;
//外层条目的判断
for (int i = 0; i <news.getData().size() ; i++) {
boolean outchecked = news.getData().get(i).getOutchecked();
//内层条目的判断
for (int j = 0; j <news.getData().get(i).getList().size() ; j++) {
boolean innerchecked = news.getData().get(i).getList().get(j).getInnerchecked();
isAllChecked=(isAllChecked&outchecked&innerchecked);
}
}
//刷新适配器
cb_01.setChecked(isAllChecked);
//刷新总体适配器
myadapter.notifyDataSetChanged();
}
@Override
public void onOutterItemChecked(int layoutPosition, boolean checked) {
news.getData().get(layoutPosition).setOutchecked(checked);
//全局条目的标识
boolean isAllChecked =true;
//外层条目的判断
for (int i = 0; i <news.getData().size() ; i++) {
boolean outchecked = news.getData().get(i).getOutchecked();
//内层条目的判断
for (int j = 0; j <news.getData().get(i).getList().size() ; j++) {
boolean innerchecked = news.getData().get(i).getList().get(j).getInnerchecked();
isAllChecked=(isAllChecked&outchecked&innerchecked);
}
}
cb_01.setChecked(isAllChecked);
//刷新总体适配器
myadapter.notifyDataSetChanged();
}
});
}
});
}
});
}
@OnClick(R.id.cb_01)
public void onViewClicked() {
if (cb_01.isChecked()){
for (int i = 0; i < data.size(); i++) {
data.get(i).setOutchecked(true);
for (int j = 0; j <data.get(i).getList().size(); j++) {
data.get(i).getList().get(j).setInnerchecked(true);
}
}
}else {
for (int i = 0; i < data.size(); i++) {
data.get(i).setOutchecked(false);
for (int j = 0; j <data.get(i).getList().size(); j++) {
data.get(i).getList().get(j).setInnerchecked(false);
}
}
}
initview();
myadapter.notifyDataSetChanged();
}
private void initview() {
int zong=0;
for (int i = 0; i <news.getData().size(); i++) {
for (int j = 0; j < news.getData().get(i).getList().size(); j++) {
if (news.getData().get(i).getList().get(j).getInnerchecked()){
zong+=news.getData().get(i).getList().get(j).getPrice() * news.getData().get(i).getList().get(j).getNum();
}
}
}
zj.setText("总价是:"+zong);
myadapter.notifyDataSetChanged();
}
//定义订阅者
@Subscribe(threadMode = ThreadMode.MAIN)
public void msg(haha ha){
// int w = ha.getW();
// Toast.makeText(this, "w:" + w, Toast.LENGTH_SHORT).show();
initview();
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销
EventBus.getDefault().unregister(this);
}
}
按钮自定义
public class togglebutton extends LinearLayout implements View.OnClickListener {
private Button jia;
private Button jian;
private TextView num;
public togglebutton(Context context) {
super(context);
}
public togglebutton(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initview(context);
}
private void initview(Context context) {
LayoutInflater.from(context).inflate(R.layout.include3,this);
jia = findViewById(R.id.jia);
jian = findViewById(R.id.jian);
num = findViewById(R.id.num);
jia.setOnClickListener(this);
jian.setOnClickListener(this);
}
@Override
public void onClick(View view) {
String s = num.getText().toString();
int i = Integer.parseInt(s);
switch (view.getId()){
case R.id.jian:
if (i>1){
if (AddAndMinus!=null){
AddAndMinus.minus();
}
}
break;
case R.id.jia:
if (AddAndMinus!=null){
AddAndMinus.add();
}
break;
}
}
private AddAndMinus AddAndMinus;
public void setAddAndMinus(AddAndMinus addAndMinus){
this.AddAndMinus=addAndMinus;
}
public interface AddAndMinus{
void add();
void minus();
}
}
类
public class haha {
private int w;
public haha(int w) {
this.w = w;
}
public haha() {
super();
}
public int getW() {
return w;
}
public void setW(int w) {
this.w = w;
}