public class MainActivity extends AppCompatActivity implements IView {
@BindView(R.id.tv_bianji)
TextView tvBianji;
@BindView(R.id.exlist)
ExpandableListView exlist;
@BindView(R.id.check_all)
public CheckBox checkAll;
@BindView(R.id.tv_zprice)
TextView price;
@BindView(R.id.tv_count)
TextView counts;
@BindView(R.id.btn_js)
Button btnJs;
ArrayList<GroupBean> groupBeen = new ArrayList<>();
ArrayList<ArrayList<GoodsBean>> goods = new ArrayList<>();
private MyShopAdapter adapter;
private boolean flagedit = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
NewsPresenter presenter = new NewsPresenter();
presenter.attachView(this);
Map<String, String> map = new HashMap<>();
map.put("uid", "99");
presenter.getData(map);
adapter = new MyShopAdapter(this, groupBeen, goods, this);
exlist.setAdapter(adapter);
for (int i = 0; i < adapter.getGroupCount(); i++) {
exlist.expandGroup(i);
}
adapter.notifyDataSetChanged();
}
@OnClick({R.id.tv_bianji, R.id.check_all, R.id.btn_js})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.tv_bianji:
String trim = tvBianji.getText().toString().trim();
if (trim.equals("编辑")) {
tvBianji.setText("完成");
} else {
tvBianji.setText("编辑");
}
for (List<GoodsBean> i1 : goods) {
for (int r = 0; r < i1.size(); r++) {
i1.get(r).setBtn(flagedit);
}
}
flagedit = !flagedit;
adapter.notifyDataSetChanged();
break;
case R.id.check_all:
boolean checked = checkAll.isChecked();
for (int i = 0; i < groupBeen.size(); i++) {
groupBeen.get(i).setGroupcheck(checked);
}
for (int q = 0; q < goods.size(); q++) {
ArrayList<GoodsBean> goodsBeen = goods.get(q);
for (int j = 0; j < goodsBeen.size(); j++) {
goodsBeen.get(j).setGoodscheck(checked);
}
}
changesum(goods);
adapter.notifyDataSetChanged();
break;
case R.id.btn_js:
int index = 0;
for (int q = 0; q < goods.size(); q++) {
ArrayList<GoodsBean> goodsBeen = goods.get(q);
for (int j = 0; j < goodsBeen.size(); j++) {
boolean goodscheck = goodsBeen.get(j).isGoodscheck();
if (goodscheck) {
index++;
}
}
}
if (index == 0) {
Toast.makeText(this, "请选择商品,谢谢", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "钱就是另一回事了", Toast.LENGTH_SHORT).show();
}
break;
}
}
@Override
public void OnSuccess(Object o) {
if (o != null) {
if (o instanceof List) {
List<ShopCar.DataBean> data = (List<ShopCar.DataBean>) o;
for (int i = 0; i < data.size(); i++) {
groupBeen.add(new GroupBean(false, data.get(i).getSellerName(), data.get(i).getSellerid()));
List<ShopCar.DataBean.ListBean> list = data.get(i).getList();
ArrayList<GoodsBean> goodsBeen = new ArrayList<>();
for (int j = 0; j < list.size(); j++) {
goodsBeen.add(new GoodsBean(false, list.get(j).getBargainPrice(), list.get(j).getImages(), list.get(j).getTitle(), list.get(j).getSubhead(), list.get(j).getNum(), list.get(j).getPid()));
}
goods.add(goodsBeen);
}
for (int i = 0; i < adapter.getGroupCount(); i++) {
exlist.expandGroup(i);
}
adapter.notifyDataSetChanged();
}
}
}
@Override
public void OnFailed(Exception e) {
Toast.makeText(this, "shibai", Toast.LENGTH_SHORT).show();
}
DecimalFormat df = new DecimalFormat("######0.00");
public void changesum(ArrayList<ArrayList<GoodsBean>> childBeen) {
int count = 0;
double sum = 0;
for (List<GoodsBean> i1 : childBeen) {
for (int r = 0; r < i1.size(); r++) {
boolean childCb1 = i1.get(r).isGoodscheck();
if (childCb1) {
double price = i1.get(r).getBargainPrice();
int num = i1.get(r).getNum();
sum += price * num;
count++;
}
}
}
price.setText("¥" + df.format(sum));
counts.setText(count + "");
}
public void deleteShop(int pid) {
Toast.makeText(this, "aadas", Toast.LENGTH_SHORT).show();
}
}
public class AddDeleteView extends LinearLayout {
private OnAddDelClickListener listener;
private EditText etNumber;
//对外提供一个点击的回调接口
public interface OnAddDelClickListener {
void onAddClick(View v);
void onDelClick(View v);
}
public void setOnAddDelClickListener(OnAddDelClickListener listener) {
if (listener != null) {
this.listener = listener;
}
}
public AddDeleteView(Context context) {
this(context, null);
}
public AddDeleteView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public AddDeleteView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context, attrs, defStyleAttr);
}
private void initView(Context context, AttributeSet attrs, int defStyleAttr) {
View.inflate(context, R.layout.adddelete, this);
TextView txtDelete = (TextView) findViewById(R.id.tv_delete);
TextView txtAdd = (TextView) findViewById(R.id.tv_add);
etNumber = (EditText) findViewById(R.id.ed_num);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddDeleteView);
String leftText = typedArray.getString(R.styleable.AddDeleteView_left_item);
String rightText = typedArray.getString(R.styleable.AddDeleteView_right_item);
String middleText = typedArray.getString(R.styleable.AddDeleteView_middle_item);
txtDelete.setText(leftText);
txtAdd.setText(rightText);
etNumber.setText(middleText);
//回收
typedArray.recycle();
txtDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
listener.onDelClick(view);
}
});
txtAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
listener.onAddClick(view);
}
});
}
//对外提供一个修改数字的方法
public void setNumber(int number) {
if (number > 0) {
etNumber.setText(number + "");
}
}
//对外提供一个获取当前数字的方法
public int getNumber() {
String string = etNumber.getText().toString();
int i = Integer.parseInt(string);
return i;
}
}
model
public class Model implements IModel {
private NewsPresenter presenter;
public Model(NewsPresenter presenter) {
this.presenter = presenter;
}
@Override
public void getData(Map<String, String> map) {
Flowable<ShopCar> flowable = RetrofitUtils.getInstance().getApiService().getNews(map);
presenter.get(flowable);
}
}
presenter
public class NewsPresenter implements IPresenter {
private IView iView;
private DisposableSubscriber<ShopCar> subscriber;
public void attachView(IView iView) {
this.iView = iView;
}
@Override
public void getData(Map<String, String> map) {
Model model = new Model(this);
model.getData(map);
}
public void detachView() {
if (subscriber != null) {
//如果该资源已被处理,则可一次性返回true。如果没有被处理返回false
if (!subscriber.isDisposed()) {
subscriber.dispose();
}
}
}
public void get(Flowable<ShopCar> flowable) {
subscriber = flowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSubscriber<ShopCar>() {
@Override
public void onNext(ShopCar listMessageBean) {
if (listMessageBean != null) {
List<ShopCar.DataBean> data = listMessageBean.getData();
if (data != null) {
iView.OnSuccess(data);
}
}
}
@Override
public void onError(Throwable t) {
iView.OnFailed(new Exception(t));
}
@Override
public void onComplete() {
}
});
}
}
接口
model,presenter
public interface IModel {
void getData(Map<String, String> map);
}
view
public interface IView {
void OnSuccess(Object o);
void OnFailed(Exception e);
}
依赖
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.google.code.gson:gson:2.8.1'
compile 'com.jakewharton:butterknife:8.5.1'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
compile 'com.squareup.retrofit2:retrofit:2.3.0'//retrofit依赖
compile 'com.squareup.retrofit2:converter-gson:2.3.0'//retrofit内部封装的GSON
compile "io.reactivex.rxjava2:rxjava:2.1.7"
compile "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.facebook.fresco:fresco:0.12.0'
compile 'com.facebook.fresco:animated-base-support:0.12.0'
compile 'com.facebook.fresco:animated-webp:0.12.0'
compile 'com.facebook.fresco:webpsupport:0.12.0'
goodbean
private boolean goodscheck;
private double bargainPrice;
private String images;
private String title;
private String subhead;
private int num;
private boolean btn;
private int pid;
GroupBean
private boolean groupcheck;
private String sellerName;
private String sellerid;