ShopActivity
package com.example.jd1012.mvp.ui.fragment; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Message; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.DividerItemDecoration; 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 android.widget.TextView; import com.example.jd1012.R; import com.example.jd1012.app.bean.Shop; import com.example.jd1012.app.bean.bean1; import com.example.jd1012.di.component.DaggerShopComponent; import com.example.jd1012.di.module.ShopModule; import com.example.jd1012.mvp.contract.ShopContract; import com.example.jd1012.mvp.presenter.ShopPresenter; import com.example.jd1012.mvp.ui.fragment.adapter.OutAdapter; import com.google.gson.Gson; import com.jess.arms.base.BaseFragment; import com.jess.arms.di.component.AppComponent; import com.jess.arms.utils.ArmsUtils; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.simple.eventbus.Subscriber; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder; import static com.jess.arms.utils.Preconditions.checkNotNull; public class ShopFragment extends BaseFragment<ShopPresenter> implements ShopContract.View { @BindView(R.id.recyView_Shop) RecyclerView recyViewShop; Unbinder unbinder; @BindView(R.id.cb_01) CheckBox cb01; @BindView(R.id.zj) TextView zj; private Shop shop; private OutAdapter outAdapter; private SharedPreferences sp; public static ShopFragment newInstance() { ShopFragment fragment = new ShopFragment(); return fragment; } @Override public void setupFragmentComponent(@NonNull AppComponent appComponent) { DaggerShopComponent //如找不到该类,请编译一下项目 .builder() .appComponent(appComponent) .shopModule(new ShopModule(this)) .build() .inject(this); } @Override public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_shop, container, false); } @Override public void initData(@Nullable Bundle savedInstanceState) { sp = getActivity().getSharedPreferences("flag", Context.MODE_PRIVATE); int uid = sp.getInt("uid", 1); String token = sp.getString("token", ""); mPresenter.getShop(uid,token); EventBus.getDefault().register(this);//注册 } /** * 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法, * 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)} * 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用 * <p> * 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行 * 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的 * 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了 * <p> * Example usage: * <pre> * public void setData(@Nullable Object data) { * if (data != null && data instanceof Message) { * switch (((Message) data).what) { * case 0: * loadData(((Message) data).arg1); * break; * case 1: * refreshUI(); * break; * default: * //do something * break; * } * } * } * * // call setData(Object): * Message data = new Message(); * data.what = 0; * data.arg1 = 1; * fragment.setData(data); * </pre> * * @param data 当不需要参数时 {@code data} 可以为 {@code null} */ @Override public void setData(@Nullable Object data) { } @Override public void showLoading() { } @Override public void hideLoading() { } @Override public void showMessage(@NonNull String message) { checkNotNull(message); ArmsUtils.snackbarText(message); } @Override public void launchActivity(@NonNull Intent intent) { checkNotNull(intent); ArmsUtils.startActivity(intent); } @Override public void killMyself() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO: inflate a fragment view View rootView = super.onCreateView(inflater, container, savedInstanceState); unbinder = ButterKnife.bind(this, rootView); return rootView; } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } @Override public void datashop(String s) { Gson gson = new Gson(); shop = gson.fromJson(s, Shop.class); List<Shop.DataBean> data = shop.getData(); // Toast.makeText(getActivity(), "data:" + data, Toast.LENGTH_SHORT).show(); LinearLayoutManager manager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); recyViewShop.setLayoutManager(manager); outAdapter = new OutAdapter(getActivity(), data); recyViewShop.setAdapter(outAdapter); recyViewShop.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL)); //接收回调的 所有复选框 outAdapter.setOnchangeclicklistener(new OutAdapter.onchangeclicklistener() { //里层 @Override public void onchecked(int layoutPosition, boolean checked) { //定义一个全局标识 boolean b=true; for (int i = 0; i < shop.getData().size(); i++) { boolean outChecked = shop.getData().get(i).isOutChecked();//外层的状态 for (int j = 0; j < shop.getData().get(i).getList().size(); j++) { boolean innerChecked = shop.getData().get(i).getList().get(j).isInnerChecked();//里层的状态 b=(b&outChecked&innerChecked); } } cb01.setChecked(b); outAdapter.notifyDataSetChanged(); } //外层 @Override public void onitemchecked(int layoutPosition, boolean checked) { shop.getData().get(layoutPosition).setOutChecked(checked);//把默认值改过来 //定义一个全局标识 boolean b=true; for (int i = 0; i < shop.getData().size(); i++) { boolean outChecked = shop.getData().get(i).isOutChecked();//外层的状态 for (int j = 0; j < shop.getData().get(i).getList().size(); j++) { boolean innerChecked = shop.getData().get(i).getList().get(j).isInnerChecked();//里层的状态 b=(b&outChecked&innerChecked); } } cb01.setChecked(b); outAdapter.notifyDataSetChanged(); } }); } //全选 @OnClick(R.id.cb_01) public void onViewClicked() { if (cb01.isChecked()) { for (int i = 0; i < shop.getData().size(); i++) { shop.getData().get(i).setOutChecked(true); for (int j = 0; j < shop.getData().get(i).getList().size(); j++) { shop.getData().get(i).getList().get(j).setInnerChecked(true); } } } else { for (int i = 0; i < shop.getData().size(); i++) { shop.getData().get(i).setOutChecked(false); for (int j = 0; j < shop.getData().get(i).getList().size(); j++) { shop.getData().get(i).getList().get(j).setInnerChecked(false); } } } //总价 initzong(); outAdapter.notifyDataSetChanged(); } private void initzong() { int zong = 0; for (int i = 0; i < shop.getData().size(); i++) { for (int j = 0; j < shop.getData().get(i).getList().size(); j++) { if(shop.getData().get(i).getList().get(j).isInnerChecked()){ zong+=shop.getData().get(i).getList().get(j).getNum()*shop.getData().get(i).getList().get(j).getPrice(); } } } zj.setText("总价为:"+zong+"元"); outAdapter.notifyDataSetChanged(); } @Subscribe(threadMode = ThreadMode.MAIN) public void msg(bean1 bean1){ initzong(); } @Override public void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this);//销毁 } }里层适配器:
package com.example.jd1012.mvp.ui.fragment.adapter; import android.content.Context; import android.net.Uri; 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.TextView; import com.example.jd1012.R; import com.example.jd1012.app.bean.Shop; import com.example.jd1012.app.bean.bean1; import com.facebook.drawee.view.SimpleDraweeView; import com.example.jd1012.mvp.ui.widgh.toggbutton; import org.greenrobot.eventbus.EventBus; import java.util.List; public class InnerAdapter extends RecyclerView.Adapter<InnerAdapter.innerHolde>{ private Context context; private List<Shop.DataBean.ListBean> list; private TextView text_num; public InnerAdapter(Context context, List<Shop.DataBean.ListBean> list) { this.context = context; this.list = list; } @NonNull @Override public innerHolde onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.inner_item, null); innerHolde holde = new innerHolde(view); return holde; } @Override public void onBindViewHolder(@NonNull innerHolde holder, int position) { holder.cb_03.setChecked(list.get(position).isInnerChecked()); holder.shop_name.setText(list.get(position).getTitle()); holder.shop_price.setText(list.get(position).getPrice()+"元"); String[] split = list.get(position).getImages().split("\\|"); Uri uri = Uri.parse(split[0]); holder.shop_simp.setImageURI(uri); text_num = holder.toggbutton.findViewById(R.id.text_num); text_num.setText(list.get(position).getNum()+""); //选中里层条目控制商家 holder.cb_03.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { list.get(position).setInnerChecked(holder.cb_03.isChecked()); onchangelistener.onchecked(holder.getLayoutPosition(),holder.cb_03.isChecked()); } }); //加减器 holder.toggbutton.setAddAndMinus(new toggbutton.AddAndMinus() { @Override public void add() { list.get(position).setNum(list.get(position).getNum()+1); bean1 be = new bean1(); EventBus.getDefault().post(be); } @Override public void munus() { 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());//判断 //通过 获取下标 接口来回调给外部 onchangelistener.onchecked(holder.getLayoutPosition(),holder.cb_03.isChecked()); } }); } @Override public int getItemCount() { return list.size(); } class innerHolde extends RecyclerView.ViewHolder{ private final TextView shop_name; private final TextView shop_price; private final SimpleDraweeView shop_simp; private final CheckBox cb_03; private toggbutton toggbutton; public innerHolde(View itemView) { super(itemView); shop_name = itemView.findViewById(R.id.shop_name); shop_price = itemView.findViewById(R.id.shop_price); shop_simp = itemView.findViewById(R.id.shop_simp); cb_03 = itemView.findViewById(R.id.cb_03); toggbutton = itemView.findViewById(R.id.toggbutton); } } //定义接口回调 private onchangelistener onchangelistener; public interface onchangelistener{ void onchecked(int layoutPosition, boolean checked); } public void setOnchangelistener(InnerAdapter.onchangelistener onchangelistener) { this.onchangelistener = onchangelistener; } }外层适配器
package com.example.jd1012.mvp.ui.fragment.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.jd1012.R; import com.example.jd1012.app.bean.Shop; import java.util.List; public class OutAdapter extends RecyclerView.Adapter<OutAdapter.outHolder>{ private Context context; private List<Shop.DataBean> list; public OutAdapter(Context context, List<Shop.DataBean> list) { this.context = context; this.list = list; } @NonNull @Override public outHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.out_shangjia, null); outHolder holder = new outHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull outHolder holder, int position) { holder.cb_02.setChecked(list.get(position).isOutChecked()); holder.cb_02.setText(list.get(position).getSellerName()); InnerAdapter innerAdapter = new InnerAdapter(context, list.get(position).getList()); holder.recyView_out.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false)); holder.recyView_out.setAdapter(innerAdapter); holder.cb_02.setOnClickListener(null);//首先给商家默认为空 holder.cb_02.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //商家控制子条目 boolean checked = holder.cb_02.isChecked(); list.get(position).setOutChecked(checked);//改变默认值 if (checked){ //判断里层的选中, 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); } } //回传的商家的状态值 onchangeclicklistener.onitemchecked(holder.getLayoutPosition(),checked); } }); //外层获取里层 回调 innerAdapter.setOnchangelistener(new InnerAdapter.onchangelistener() { @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);//商家获得到的值要改变默认值 onchangeclicklistener.onchecked(holder.getLayoutPosition(),checked);//把状态值回传给商家全选框 } }); } @Override public int getItemCount() { return list.size(); } class outHolder extends RecyclerView.ViewHolder{ private final CheckBox cb_02; private final RecyclerView recyView_out; public outHolder(View itemView) { super(itemView); cb_02 = itemView.findViewById(R.id.cb_02); recyView_out = itemView.findViewById(R.id.recyView_out); } } //定义接口回调 private onchangeclicklistener onchangeclicklistener; public interface onchangeclicklistener{ void onchecked(int layoutPosition, boolean checked); void onitemchecked(int layoutPosition, boolean checked); } public void setOnchangeclicklistener(OutAdapter.onchangeclicklistener onchangeclicklistener) { this.onchangeclicklistener = onchangeclicklistener; } }