GouPresenter
package com.bwie.jd.presenter;
import com.bwie.jd.model.bean.AddBean;
import com.bwie.jd.model.http.GouModel;
import com.bwie.jd.view.IView.IGouView;
import java.lang.ref.WeakReference;
public class GouPresenter implements GouModel.ScuMod{
//弱引用解绑
WeakReference view;
GouModel model;
public GouPresenter( IGouView view) {
attach(view);
model = new GouModel();
model.setScuMod(this);
}
@Override
public void MScus(AddBean bean) {
view.get().onsuccer(bean);
}
//我们在写一个方法拿到我们的请求
public void ShowPer(){
model.Succes();
}
//绑定
public void attach(IGouView views){
view = new WeakReference(views);
}
//解绑方法
public void detach(){
view.clear();
}
}
GouModel
package com.bwie.jd.model.http;
import android.util.Log;
import com.bwie.jd.model.bean.AddBean;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.OkHttpClient;
public class GouModel {
ScuMod scuMod;
public void setScuMod(ScuMod scuMod) {
this.scuMod = scuMod;
}
//自己定义一个请求方法
public void Succes() {
OkHttpClient ok = new OkHttpClient.Builder()
.build();
//请求数据
Observable<AddBean> gets = HttpUtils.getHttpUtilsInstance().apiClient.gets(91);
gets.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<AddBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(AddBean bean) {
scuMod.MScus(bean);
Log.e("===========", bean.getData().get(0).getSellerName());
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
//定义一个接口
public interface ScuMod{
void MScus(AddBean bean);
}
}
ShopAdapter
package com.bwie.jd.view.adapter;
import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import com.bwie.jd.R;
import com.bwie.jd.model.bean.AddBean;
import com.bwie.jd.view.util.plusview;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ShopAdapter extends RecyclerView.Adapter<ShopAdapter.ViewHolder>{
private Context context;//传入上下文
private List<AddBean.DataBean.ListBean> list;//bean包的集合
//存放商家的集合
private Map<String, String> map = new HashMap<>();
//有参构造
public ShopAdapter(Context context) {
this.context = context;
}
/**
* 添加数据并更新
*/
public void add(AddBean bean) {
//判段如果list是空的
if (this.list == null) {
//那就把listNew出来
this.list = new ArrayList<>();
}
//遍历商家
for (AddBean.DataBean shop : bean.getData()) {
map.put(shop.getSellerid(), shop.getSellerName());
// 遍历商品
for (int i = 0; i < shop.getList().size(); i++) {
this.list.add(shop.getList().get(i));
}
}
setFirst(this.list); //控制是否显示商家
notifyDataSetChanged();//更新数据
}
/**
* 设置数据源, 控制显示商家
*
* @param list 这里把集合给setFirst这个方法就是要设置商品的显示与阴藏
*/
private void setFirst(List<AddBean.DataBean.ListBean> list) {
//这里判断 如果集合的字符大于0 你就默认显示一个商家
if (list.size() > 0) {
list.get(0).setIsFirst(1); //这是默认显示商家
for (int i = 1; i < list.size(); i++) { //这是For循环把集合里的所有元素循出来
if (list.get(i).getSellerid() == list.get(i - 1).getSellerid()) {
//如果俩个商品是同一个商家的那么就让这两个商品只显示一个商家
list.get(i).setIsFirst(2);
} else {
//如果不是 就两个都显示
list.get(i).setIsFirst(1);
if (list.get(i).isItemSelected()) {
list.get(i).setShopSelected(list.get(i).isItemSelected());
}
}
}
}
}
/**
* 加载布局文件
*/
@Override
public ShopAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.adapter_layout, null);
//添加到ViewHolder里
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ShopAdapter.ViewHolder holder, final int position) {
// 显示商品图片
if (list.get(position).getIsFirst() == 1) {
//显示商家 VISIBLE显示商品
holder.shop_checkbox.setVisibility(View.VISIBLE);//显示商家
holder.tv_item_shopcart_shopname.setVisibility(View.VISIBLE);//显示商家
holder.shop_checkbox.setChecked(list.get(position).isShopSelected());
// 显示商家的名称
// list.get(position).getSellerid() 取到商家的id
// map.get()取到 商家的名称
holder.tv_item_shopcart_shopname.setText(map.get(String.valueOf(list.get(position).getSellerid())));
} else {
holder.shop_checkbox.setVisibility(View.GONE);//隐藏商家
holder.tv_item_shopcart_shopname.setVisibility(View.GONE);//隐藏商家
}
//控制 商品的 checkbox
holder.item_checkbox.setChecked(list.get(position).isItemSelected());
//这是分割 由于接口中的图片是连这的所以必须要分割
String[] url = list.get(position).getImages().split("\|");
// 从分割完之后返回的数组中设置所要显示的图片
// ImageLoader.getInstance().displayImage(url[0], holder.item_pic);
Uri uri = Uri.parse(url[0]);
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(true)
.build();
holder.item_pic.setController(controller);
//设置所要显示的文字 也是商家
holder.item_name.setText(list.get(position).getTitle());
//设置所要显示的价格
holder.item_price.setText(list.get(position).getPrice() + “”);
//计算完所友的商品总价后在这设置显示
holder.plus_view_id.setEditText(list.get(position).getNum());
// 商家的checkbox 多选框
holder.shop_checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
list.get(position).setShopSelected(holder.shop_checkbox.isChecked());
for (int i = 0; i < list.size(); i++) {
if (list.get(position).getSellerid() == list.get(i).getSellerid()) {
list.get(i).setItemSelected(holder.shop_checkbox.isChecked());
}
}
notifyDataSetChanged();//更新数据源
sum(list);//计算总价
}
});
// 商品的checkbox 多选框
holder.item_checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
list.get(position).setItemSelected(holder.item_checkbox.isChecked());
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if (list.get(i).getSellerid() == list.get(j).getSellerid() && !list.get(j).isItemSelected()) {
list.get(i).setShopSelected(false);
break;
} else {
list.get(i).setShopSelected(true);
}
}
}
notifyDataSetChanged();//更新数据源
sum(list);//计算总价
}
});
//删除的点击事件
holder.item_del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//从集合中移除商家信息
list.remove(position);
setFirst(list);
notifyDataSetChanged();//更新数据
sum(list);//算总价
}
});
//加减号
holder.plus_view_id.setListener(new plusview.ClickListener() {
@Override
public void click(int count) {
list.get(position).setNum(count);
notifyDataSetChanged();//更新适配器
sum(list);//计算总价
}
});
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();//三元运算符
}
/**
* 计算总价
*
* @param list
*/
private void sum(List<AddBean.DataBean.ListBean> list) {
int totalNum = 0;
float totalMoney = 0.0f;
boolean allCheck = true;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).isItemSelected()) {
totalNum += list.get(i).getNum();
totalMoney += list.get(i).getNum() * list.get(i).getPrice();
} else {
allCheck = false;
}
}
listener.setTotal(totalMoney + “”, totalNum + “”, allCheck);
}
public void selectAll(boolean cl) {
for (int i = 0; i < list.size(); i++) {
list.get(i).setShopSelected(cl);
list.get(i).setItemSelected(cl);
}
notifyDataSetChanged();
sum(list);
}
public class ViewHolder extends RecyclerView.ViewHolder {
View view; //item_del;
plusview plus_view_id;
CheckBox shop_checkbox, item_checkbox;
TextView tv_item_shopcart_shopname, item_price, item_name, tv_item_shopcart_cloth_size;
SimpleDraweeView item_pic;
Button item_del;
public ViewHolder(View itemView) {
super(itemView);
view = itemView.findViewById(R.id.view);
item_del = itemView.findViewById(R.id.item_del);
shop_checkbox = itemView.findViewById(R.id.shop_checkbox);
item_checkbox = itemView.findViewById(R.id.item_checkbox);
tv_item_shopcart_shopname = itemView.findViewById(R.id.tv_item_shopcart_shopname);
item_price = itemView.findViewById(R.id.item_price);
item_name = itemView.findViewById(R.id.item_name);
tv_item_shopcart_cloth_size = itemView.findViewById(R.id.tv_item_shopcart_cloth_size);
item_pic = itemView.findViewById(R.id.item_pic);
plus_view_id = itemView.findViewById(R.id.plus_view_id);
}
}
public UpdateUiListener listener;
public void setListener(UpdateUiListener listener) {
this.listener = listener;
}
//更新接口数据
public interface UpdateUiListener {
public void setTotal(String total, String num, boolean allCheck);
}
}
ShopFragment
package com.bwie.jd.view.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bwie.jd.R;
import com.bwie.jd.model.bean.AddBean;
import com.bwie.jd.presenter.GouPresenter;
import com.bwie.jd.view.IView.IGouView;
import com.bwie.jd.view.activity.MainActivity;
import com.bwie.jd.view.adapter.ShopAdapter;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
public class ShopFragment extends Fragment implements IGouView {
@BindView(R.id.third_recyclerview)
RecyclerView thirdRecyclerview;
@BindView(R.id.third_allselect)
CheckBox thirdAllselect;
@BindView(R.id.third_totalprice)
TextView thirdTotalprice;
@BindView(R.id.third_totalnum)
TextView thirdTotalnum;
@BindView(R.id.third_submit)
Button thirdSubmit;
@BindView(R.id.third_pay_linear)
LinearLayout thirdPayLinear;
Unbinder unbinder;
private GouPresenter presenter;
private ShopAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_shop, container, false);
unbinder = ButterKnife.bind(this, view);
//调用P层
presenter = new GouPresenter(this);
presenter.ShowPer();
return view;
}
@Override
public void onsuccer(AddBean bean) {
//线性布局
LinearLayoutManager manager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
thirdRecyclerview.setLayoutManager(manager);
//绑定适配器
adapter = new ShopAdapter(getActivity());
thirdRecyclerview.setAdapter(adapter);
thirdAllselect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
adapter.selectAll(thirdAllselect.isChecked());
}
});
adapter.setListener(new ShopAdapter.UpdateUiListener() {
@Override
public void setTotal(String total, String num, boolean allCheck) {
thirdAllselect.setChecked(allCheck);
thirdTotalnum.setText(num);
thirdTotalprice.setText(total);
}
});
adapter.add(bean);
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
presenter.detach();
}
}
Fragment布局
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="@dimen/margin_10dp"
android:background="@color/background_color" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<!-- 商店checkbox -->
<CheckBox
android:id="@+id/shop_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/margin_10dp"
android:paddingLeft="@dimen/margin_15dp"
android:paddingRight="@dimen/margin_15dp"
android:paddingTop="@dimen/margin_10dp"
/>
<!-- 商店名称 -->
<TextView
android:id="@+id/tv_item_shopcart_shopname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawablePadding="@dimen/padding_5dp"
android:padding="@dimen/padding_10dp"
android:text="宝儿家服装"
android:textColor="@color/cblack" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/margin_1dp"
android:background="@color/background_color" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<!-- 商品 checkbox -->
<CheckBox
android:id="@+id/item_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/margin_15dp"
/>
<!-- 商品图片 -->
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/item_pic"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_margin="@dimen/margin_10dp" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/item_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥185"
android:textColor="@color/main_red_text"
android:textSize="@dimen/common_font_size_14" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_5dp"
android:layout_marginTop="@dimen/margin_5dp">
<TextView
android:id="@+id/item_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="颜色:黑色"
android:textColor="@color/cblack"
android:textSize="@dimen/common_font_size_12" />
<TextView
android:id="@+id/tv_item_shopcart_cloth_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/margin_10dp"
android:text="尺寸:XL"
android:textColor="@color/cblack"
android:textSize="@dimen/common_font_size_12" />
</LinearLayout>
<com.bwie.jd.view.util.plusview
android:id="@+id/plus_view_id"
android:layout_width="100dp"
android:layout_height="wrap_content"></com.bwie.jd.view.util.plusview>
</LinearLayout>
<View
android:layout_width="@dimen/margin_1dp"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/padding_10dp"
android:layout_marginTop="@dimen/padding_10dp"
android:background="@color/splitline_color" />
<Button
android:id="@+id/item_del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/margin_20dp"
android:text="删除"
android:background="#f0f0f0"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/margin_1dp"
android:background="@color/background_color" />