自定义拦截器interceptor
- public class MyInterceptor implements Interceptor {
- @Override
- public Response intercept(Chain chain) throws IOException {
- Request ysRequest = chain.request();
- FormBody body = (FormBody) ysRequest.body();
- FormBody.Builder builder = new FormBody.Builder();
- for (int i = 0; i <body.size(); i++) {
- String name = body.name(i);
- String value = body.value(i);
- builder.add(name,value);
- }
- builder.add("uri","evaluation");
- FormBody formBody = builder.build();
- Request request = new Request.Builder().url(ysRequest.url()).post(formBody).build();
- return chain.proceed(request);
- }
- }
单列模式的网络请求(OkHttp)
- package bwie.com.yijicart.net;
- import java.util.Map;
- import okhttp3.Callback;
- import okhttp3.FormBody;
- import okhttp3.OkHttpClient;
- import okhttp3.Request;
- public class HttpUtils {
- private static HttpUtils httpUtils;
- private final OkHttpClient client;
- private HttpUtils() {
- /**
- * okhttp请求+自定义拦截器
- */
- client = new OkHttpClient.Builder().addInterceptor(new MyInterceptor()).build();
- }
- public static HttpUtils getHttpUtils(){
- if(httpUtils==null){
- synchronized (HttpUtils.class){
- httpUtils=new HttpUtils();
- }
- }
- return httpUtils;
- }
- public void doPost(String url, Map<String,String>map, Callback callback){
- FormBody.Builder builder = new FormBody.Builder();
- for (Map.Entry<String,String> e:map.entrySet()) {
- builder.add(e.getKey(),e.getValue());
- }
- FormBody formBody = builder.build();
- Request request = new Request.Builder().url(url).post(formBody).build();
- client.newCall(request).enqueue(callback);
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal" android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <ImageView
- android:id="@+id/jian"
- android:layout_width="20dp"
- android:layout_height="20dp"
- android:src="@drawable/shopcart_minus_grey" />
- <TextView
- android:id="@+id/tv_num"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
- android:background="@drawable/shopcart_add_btn"
- android:paddingBottom="2dp"
- android:paddingLeft="20dp"
- android:paddingRight="20dp"
- android:paddingTop="2dp"
- android:text="1" />
- <ImageView
- android:id="@+id/jia"
- android:layout_width="20dp"
- android:layout_height="20dp"
- android:layout_marginLeft="5dp"
- android:src="@drawable/shopcart_add_red" />
- <Button
- android:id="@+id/del"
- android:text="删除"
- android:layout_marginLeft="10dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </LinearLayout>
自定义View
- package bwie.com.yijicart.view;
- import android.content.Context;
- import android.util.AttributeSet;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import bwie.com.yijicart.R;
- public class MyView extends LinearLayout {
- private ImageView jia;
- private ImageView jian;
- private TextView tv_num;
- private Button del;
- public MyView(Context context) {
- this(context,null);
- }
- public MyView(Context context, AttributeSet attrs) {
- super(context, attrs);
- View view = LayoutInflater.from(context).inflate(R.layout.zyitem, this);
- jia = view.findViewById(R.id.jia);
- jian = view.findViewById(R.id.jian);
- tv_num = view.findViewById(R.id.tv_num);
- del = view.findViewById(R.id.del);
- }
- public void addClickListener(OnClickListener onClickListener){
- jia.setOnClickListener(onClickListener);
- }
- public void jianClickListener(OnClickListener onClickListener){
- jian.setOnClickListener(onClickListener);
- }
- public void delClickListener(OnClickListener onClickListener){
- del.setOnClickListener(onClickListener);
- }
- public void setNum(String num) {
- tv_num.setText(num);
- }
- public int getNum() {
- String num = tv_num.getText().toString();
- return Integer.parseInt(num);
- }
- }
activity—main的布局
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/activity_main"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context="bwie.com.yijicart.view.MainActivity">
- <android.support.v7.widget.RecyclerView
- android:id="@+id/rlv"
- android:layout_weight="1"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- </android.support.v7.widget.RecyclerView>
- <LinearLayout
- android:layout_weight="9"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <CheckBox
- android:id="@+id/quanxuan"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- <TextView
- android:layout_marginLeft="5dp"
- android:text="全选"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <TextView
- android:id="@+id/zongji"
- android:layout_marginLeft="80dp"
- android:text="合计:0"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <TextView
- android:layout_marginLeft="100dp"
- android:id="@+id/heji"
- android:text="结算(0)"
- android:gravity="center"
- android:background="@color/colorAccent"
- android:layout_width="wrap_content"
- android:layout_height="match_parent" />
- </LinearLayout>
- </LinearLayout>
MainActivity
- <span style="font-size:14px;">package bwie.com.yijicart.view;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.view.View;
- import android.widget.CheckBox;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import org.greenrobot.eventbus.EventBus;
- import org.greenrobot.eventbus.Subscribe;
- import java.util.List;
- import bwie.com.yijicart.R;
- import bwie.com.yijicart.adapter.Myadapter;
- import bwie.com.yijicart.bean.CountPrice;
- import bwie.com.yijicart.bean.GoodsBean;
- import bwie.com.yijicart.bean.MessageEvent;
- import bwie.com.yijicart.persenter.GoodsPersenter;
- import bwie.com.yijicart.view.IMain.IMain;
- public class MainActivity extends AppCompatActivity implements IMain, View.OnClickListener {
- private RecyclerView mRlv;
- private CheckBox mQuanxuan;
- /**
- * 合计:0
- */
- private TextView mZongji;
- /**
- * 结算(0)
- */
- private TextView mHeji;
- private LinearLayout mActivityMain;
- private Myadapter myadapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- EventBus.getDefault().register(this);
- initView();
- new GoodsPersenter(this).getGoods();
- }
- @Override
- public void showList(List<GoodsBean.DataBean.DatasBean> list) {
- mRlv.setLayoutManager(new LinearLayoutManager(this));
- myadapter = new Myadapter(this, list);
- mRlv.setAdapter(myadapter);
- }
- private void initView() {
- mRlv = (RecyclerView) findViewById(R.id.rlv);
- mQuanxuan = (CheckBox) findViewById(R.id.quanxuan);
- mQuanxuan.setOnClickListener(this);
- mZongji = (TextView) findViewById(R.id.zongji);
- mHeji = (TextView) findViewById(R.id.heji);
- mActivityMain = (LinearLayout) findViewById(R.id.activity_main);
- }
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- default:
- break;
- case R.id.quanxuan:
- myadapter.UpdateAllCheck(mQuanxuan.isChecked());
- break;
- }
- }
- @Subscribe
- public void onMessageEvent(MessageEvent event){
- mQuanxuan.setChecked(event.isCheck());
- }
- @Subscribe
- public void onMessageEvent(CountPrice cp){
- mZongji.setText("总价:"+cp.getPrice()+"元");
- mHeji.setText("结算("+cp.getCount()+")");
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- EventBus.getDefault().unregister(this);
- }
- }</span>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal" android:layout_width="match_parent"
- android:layout_marginLeft="20dp"
- android:background="#FFEEE718"
- android:layout_marginTop="15dp"
- android:layout_height="wrap_content">
- <CheckBox
- android:id="@+id/gx"
- android:layout_marginLeft="25dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <TextView
- android:id="@+id/name2"
- android:layout_marginLeft="20dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <TextView
- android:id="@+id/time"
- android:layout_marginLeft="20dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <TextView
- android:id="@+id/price"
- android:layout_marginLeft="20dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </LinearLayout>
- <bwie.com.yijicart.view.MyView
- android:id="@+id/myView"
- android:layout_gravity="center_vertical"
- android:layout_marginLeft="20dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </bwie.com.yijicart.view.MyView>
- </LinearLayout>
- package bwie.com.yijicart.adapter;
- import android.content.Context;
- 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 org.greenrobot.eventbus.EventBus;
- import java.util.List;
- import bwie.com.yijicart.R;
- import bwie.com.yijicart.bean.CountPrice;
- import bwie.com.yijicart.bean.GoodsBean;
- import bwie.com.yijicart.bean.MessageEvent;
- import bwie.com.yijicart.view.MyView;
- import static bwie.com.yijicart.R.id.price;
- public class Myadapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
- private Context context;
- private List<GoodsBean.DataBean.DatasBean> list;
- public Myadapter(Context context, List<GoodsBean.DataBean.DatasBean> list) {
- this.context = context;
- this.list = list;
- }
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View view = LayoutInflater.from(context).inflate(R.layout.childitem, parent, false);
- return new MyViewHodler(view);
- }
- @Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
- final GoodsBean.DataBean.DatasBean datasBean = list.get(position);
- final MyViewHodler myViewHodler= (MyViewHodler) holder;
- myViewHodler.gx.setChecked(datasBean.isCheck());
- myViewHodler.tv_name.setText(datasBean.getType_name());
- myViewHodler.tv_prc.setText(datasBean.getPrice()+"");
- myViewHodler.tv_time.setText(datasBean.getAdd_time());
- myViewHodler.myView.setNum(datasBean.getNum()+"");
- //对勾选进行点击事件
- myViewHodler.gx.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- datasBean.setCheck(myViewHodler.gx.isChecked());
- //计算勾选状态下的数量和价格
- EventBus.getDefault().post(getCountandPrice());
- //通过判断子条目的checkbox是否全部选中,来改变全选的状态
- UpdateAllQX(isCheckAll());
- notifyDataSetChanged();
- }
- });
- /**
- * 加的点击事件
- */
- myViewHodler.myView.addClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- int num = myViewHodler.myView.getNum();
- ++num;
- datasBean.setNum(num);
- myViewHodler.myView.setNum(num+"");
- if(myViewHodler.gx.isChecked()){
- EventBus.getDefault().post(getCountandPrice());
- }
- notifyDataSetChanged();
- }
- });
- /***
- * 减的点击事件
- */
- myViewHodler.myView.jianClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- int num = myViewHodler.myView.getNum();
- if(num==0){
- return;
- }
- num--;
- datasBean.setNum(num);
- myViewHodler.myView.setNum(num+"");
- if(myViewHodler.gx.isChecked()){
- EventBus.getDefault().post(getCountandPrice());
- }
- notifyDataSetChanged();
- }
- });
- /**
- * 点击删除事假
- */
- myViewHodler.myView.delClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- list.remove(position);
- if(myViewHodler.gx.isChecked()){
- EventBus.getDefault().post(getCountandPrice());
- }
- notifyDataSetChanged();
- }
- });
- }
- @Override
- public int getItemCount() {
- return list.size();
- }
- class MyViewHodler extends RecyclerView.ViewHolder{
- private final CheckBox gx;
- private final TextView tv_time;
- private final TextView tv_prc;
- private final TextView tv_name;
- private final MyView myView;
- public MyViewHodler(View itemView) {
- super(itemView);
- gx = itemView.findViewById(R.id.gx);
- tv_time = itemView.findViewById(R.id.time);
- tv_prc = itemView.findViewById(price);
- tv_name = itemView.findViewById(R.id.name2);
- myView = itemView.findViewById(R.id.myView);
- }
- }
- /**
- * 判断子条目的checkbox是否全部选中
- * @return
- */
- private boolean isCheckAll(){
- for (int i = 0; i <list.size(); i++) {
- GoodsBean.DataBean.DatasBean datasBean = list.get(i);
- if(!datasBean.isCheck()){
- return false;
- }
- }
- return true;
- }
- /**
- * 改变全选的状态
- */
- private void UpdateAllQX(boolean flag){
- MessageEvent messageEvent = new MessageEvent();
- messageEvent.setCheck(flag);
- EventBus.getDefault().post(messageEvent);
- }
- /**
- * 计算勾选状态下的数量和价格
- */
- private CountPrice getCountandPrice(){
- int count=0;
- int price=0;
- for (int i = 0; i <list.size(); i++) {
- GoodsBean.DataBean.DatasBean datasBean = list.get(i);
- if(datasBean.isCheck()){
- count+=datasBean.getNum();
- price+=datasBean.getPrice()*datasBean.getNum();
- }
- }
- CountPrice countPrice = new CountPrice();
- countPrice.setCount(count);
- countPrice.setPrice(price);
- return countPrice;
- }
- /**
- * 全选时改变所有的CheckBox都为选中的状态
- */
- public void UpdateAllCheck(boolean flag){
- for (int i = 0; i <list.size(); i++) {
- GoodsBean.DataBean.DatasBean datasBean = list.get(i);
- datasBean.setCheck(flag);
- }
- EventBus.getDefault().post(getCountandPrice());
- notifyDataSetChanged();
- }
- }