package com.example.dell.practice0924.ui;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.dell.practice0924.R;
import com.example.dell.practice0924.adapter.OutAdapter;
import com.example.dell.practice0924.bean.bean1;
import com.example.dell.practice0924.bean.news;
import com.example.dell.practice0924.di.Icontract;
import com.example.dell.practice0924.di.Presenterimp;
import com.example.dell.practice0924.view.MyView;
import com.google.gson.Gson;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements Icontract.iview {
private Presenterimp presenterimp;
private RecyclerView recy_view;
private OutAdapter adapter;
private com.example.dell.practice0924.bean.news news;
private CheckBox cb_01;
private TextView zj;
private EditText edit_sou;
private Button btn_sou;
private TextView text_clear;
private List<String> list = new ArrayList<>();//流式
private MyView myview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recy_view = findViewById(R.id.recy_view);
cb_01 = findViewById(R.id.cb_01);
zj = findViewById(R.id.zj);
edit_sou = findViewById(R.id.edit_sou);
btn_sou = findViewById(R.id.btn_sou);
text_clear = findViewById(R.id.text_clear);
myview = findViewById(R.id.myview);
text_clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myview.removeAllViews();
}
});
btn_sou.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = edit_sou.getText().toString();
list.add(s);
TextView view = new TextView(MainActivity.this);
view.setText(s);
myview.addView(view);
myview.setPadding(5,5,5,5);
}
});
presenterimp = new Presenterimp();
EventBus.getDefault().register(this);//!!!!!!!!注册
presenterimp.attchview(this);
presenterimp.requestinfo();
cb_01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(cb_01.isChecked()){
for (int i = 0; i <news.getData().size() ; i++) {
news.getData().get(i).setOutchecked(true);
for (int j = 0; j <news.getData().get(i).getList().size() ; j++) {
news.getData().get(i).getList().get(j).setInnerchecked(true);
}
}
}else {
for (int i = 0; i <news.getData().size() ; i++) {
news.getData().get(i).setOutchecked(false);
for (int j = 0; j <news.getData().get(i).getList().size() ; j++) {
news.getData().get(i).getList().get(j).setInnerchecked(false);
}
}
}
//总价的方法
initzong();
adapter.notifyDataSetChanged();
}
});
}
private void initzong() {
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).isInnerchecked()){
zong+=news.getData().get(i).getList().get(j).getNum()*news.getData().get(i).getList().get(j).getPrice();
}
}
}
zj.setText(zong+"元");
adapter.notifyDataSetChanged();
}
//接收加减的方法,,,,,主线程
@Subscribe(threadMode = ThreadMode.MAIN)
public void msg(bean1 ha){
initzong();
}
@Override
protected void onDestroy() {
super.onDestroy();
presenterimp.datachview(this);
EventBus.getDefault().unregister(this);
}
@Override
public void data(final String s) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
Gson gson = new Gson();
news = gson.fromJson(s, news.class);
List<com.example.dell.practice0924.bean.news.DataBean> data = news.getData();
LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this);
recy_view.setLayoutManager(manager);
adapter = new OutAdapter(MainActivity.this, data);
recy_view.setAdapter(adapter);
//全选 来控制商家跟条目
adapter.setOnclickchangelisten(new OutAdapter.onclickchangelisten() {
@Override
public void onchecked(int layoutPosition, boolean checked) {
boolean b=true;
for (int i = 0; i < news.getData().size(); i++) {
boolean outchecked = news.getData().get(i).isOutchecked();
for (int j = 0; j < news.getData().get(i).getList().size(); j++) {
boolean innerchecked = news.getData().get(i).getList().get(j).isInnerchecked();
b=(b&outchecked&innerchecked);
}
}
cb_01.setChecked(b);
adapter.notifyDataSetChanged();
}
@Override
public void onitemchecked(int layoutPosition, boolean ischecked) {
//设置外层的选中状态
news.getData().get(layoutPosition).setOutchecked(ischecked);
boolean b=true;
for (int i = 0; i < news.getData().size(); i++) {
boolean outchecked = news.getData().get(i).isOutchecked();
for (int j = 0; j < news.getData().get(i).getList().size(); j++) {
boolean innerchecked = news.getData().get(i).getList().get(j).isInnerchecked();
b=(b&outchecked&innerchecked);
}
}
cb_01.setChecked(b);
adapter.notifyDataSetChanged();
}
});
}
});
}
}
=============================外部适配器=====================================================
package com.example.dell.practice0924.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import com.example.dell.practice0924.R;
import com.example.dell.practice0924.bean.news;
import com.example.dell.practice0924.ui.MainActivity;
import java.util.List;
public class OutAdapter extends RecyclerView.Adapter<OutAdapter.oneHolder> {
private Context context;
private List<news.DataBean> list;
private InnerAdapter innerAdapter;
public OutAdapter(Context context, List<news.DataBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public oneHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.include1, null);
oneHolder holder = new oneHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final oneHolder holder, final int position) {
holder.cb_02.setChecked(list.get(position).isOutchecked());
LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
holder.recy_view01.setLayoutManager(manager);
innerAdapter = new InnerAdapter(context, list.get(position).getList());
holder.recy_view01.setAdapter(innerAdapter);
//商家选中控制里面的子条目
holder.cb_02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
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);
}
}
onclickchangelisten.onitemchecked(holder.getLayoutPosition(),ischecked);
}
});
//获取里层条目状态
innerAdapter.setOnclickchangelisten(new InnerAdapter.onclickchangelisten() {
@Override
public void onchecked(int layoutPosition, boolean checked) {
boolean b= true;
for (int i = 0; i < list.get(holder.getLayoutPosition()).getList().size(); i++) {
boolean innerchecked = list.get(holder.getLayoutPosition()).getList().get(i).isInnerchecked();
b=(b&innerchecked);
}
holder.cb_02.setChecked(b);
list.get(position).setOutchecked(b);
onclickchangelisten.onchecked(holder.getLayoutPosition(),checked);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
//创建视图
class oneHolder extends RecyclerView.ViewHolder{
private final RecyclerView recy_view01;
private final CheckBox cb_02;
public oneHolder(View itemView) {
super(itemView);
cb_02 = itemView.findViewById(R.id.cb_02);
recy_view01 = itemView.findViewById(R.id.recy_view01);
}
}
private onclickchangelisten onclickchangelisten;
public void setOnclickchangelisten(onclickchangelisten onclickchangelisten) {
this.onclickchangelisten = onclickchangelisten;
}
public interface onclickchangelisten{
void onchecked(int layoutPosition, boolean checked);
void onitemchecked(int layoutPosition, boolean ischecked);
}
}
=========================================里层适配器================================
package com.example.dell.practice0924.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
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.dell.practice0924.R;
import com.example.dell.practice0924.bean.bean1;
import com.example.dell.practice0924.bean.news;
import com.example.dell.practice0924.widge.togglebutton;
import org.greenrobot.eventbus.EventBus;
import java.util.List;
public class InnerAdapter extends RecyclerView.Adapter<InnerAdapter.twoHolder>{
private Context context;
private List<news.DataBean.ListBean> list;
private TextView text_num;
public InnerAdapter(Context context, List<news.DataBean.ListBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public twoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.include2, null);
twoHolder holder = new twoHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final twoHolder holder, final int position) {
holder.cb_03.setChecked(list.get(position).isInnerchecked());
text_num = holder.togglebutton.findViewById(R.id.text_num);
text_num.setText(list.get(position).getNum()+"");
holder.price.setText("单价为"+list.get(position).getPrice());
holder.shop_name.setText(list.get(position).getTitle());
String[] split = list.get(position).getImages().split("\\|");
Glide.with(context).load(split[0]).into(holder.img);
//加减
holder.togglebutton.setAddAndMinusu(new togglebutton.AddAndMinus() {
@Override
public void add() {
list.get(position).setNum(list.get(position).getNum()+1);
bean1 bean1 = new bean1();
EventBus.getDefault().post(bean1);
}
@Override
public void minus() {
list.get(position).setNum(list.get(position).getNum()-1);
bean1 bean1 = new bean1();
EventBus.getDefault().post(bean1);
}
});
holder.cb_03.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.get(position).setInnerchecked(holder.cb_03.isChecked());
onclickchangelisten.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 TextView shop_name;
private final TextView price;
private final ImageView img;
private final togglebutton togglebutton;
public twoHolder(View itemView) {
super(itemView);
cb_03 = itemView.findViewById(R.id.cb_03);
shop_name = itemView.findViewById(R.id.shop_name);
price = itemView.findViewById(R.id.price);
img = itemView.findViewById(R.id.img);
togglebutton = itemView.findViewById(R.id.togglebutton);
}
}
private onclickchangelisten onclickchangelisten;
public void setOnclickchangelisten(InnerAdapter.onclickchangelisten onclickchangelisten){
this.onclickchangelisten= onclickchangelisten;
}
public interface onclickchangelisten{
void onchecked(int layoutPosition, boolean checked);
}
}