自定义拦截器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);
}
}
自定义View的布局(购物车的加减)
<?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
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);
}
}
适配器的布局
<?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();
}
}