Android购物车 + Mvp + 二级联动以及数量价格加减 + 全选反选 + 登录注册 + 回显 + 水波图 +详情展示

1. 登录 

package yanjupeng20190404.myapplication.mvp.view;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import yanjupeng20190404.myapplication.R;
import yanjupeng20190404.myapplication.cont.Cont;
import yanjupeng20190404.myapplication.mvp.presenter.Presenter;

public class LoginActivity extends AppCompatActivity implements Cont.LoginViewInterface ,View.OnClickListener {

    public EditText editText_phone , editText_pwd;
    public Button button_login , button_reg;

    public Cont.PresenterInterface presenterInterface;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        presenterInterface = new Presenter<>(this);

        editText_phone = findViewById(R.id.ed_phone_id);
        editText_pwd = findViewById(R.id.ed_pwd_id);
        button_login = findViewById(R.id.but_login_id);
        button_reg = findViewById(R.id.but_reg_id);
        button_reg.setOnClickListener(this);
        button_login.setOnClickListener(this);

    }

    @Override
    public void refreshLogin(String info,Object object1,Object object2) {

        Toast.makeText(this , info , Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(this, FragmentActivity.class);
        intent.putExtra("name" , object1.toString());
        intent.putExtra("img" , object2.toString());
        startActivity(intent);
        finish();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.but_login_id:
                String phone = editText_phone.getText().toString();
                String pwd = editText_pwd.getText().toString();
                presenterInterface.toLogin(phone , pwd);
                break;
            case R.id.but_reg_id:
                startActivity(new Intent(this , RegActivity.class));
                finish();
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterInterface.fnish();
        presenterInterface = null;

    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mvp.view.LoginActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <EditText
            android:id="@+id/ed_phone_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入手机号"
            />
        <EditText
            android:id="@+id/ed_pwd_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入密码"
            />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            >

            <Button
                android:id="@+id/but_login_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="登录"
                />

            <Button
                android:id="@+id/but_reg_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="注册"
                />
        </LinearLayout>



    </LinearLayout>



</android.support.constraint.ConstraintLayout>

2 。 注册

package yanjupeng20190404.myapplication.mvp.view;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import yanjupeng20190404.myapplication.R;
import yanjupeng20190404.myapplication.cont.Cont;
import yanjupeng20190404.myapplication.mvp.presenter.Presenter;

public class RegActivity extends AppCompatActivity implements Cont.RegViewInterface {

    public EditText editText_regPhone , editText_regPwd;

    public Button button_ok;

    public Cont.PresenterInterface presenterInterface;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reg);
        presenterInterface = new Presenter<>(this);

        editText_regPhone = findViewById(R.id.ed_reg_phone_id);
        editText_regPwd = findViewById(R.id.ed_reg_pwd_id);
        button_ok = findViewById(R.id.but_ok_id);
        button_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String phone = editText_regPhone.getText().toString();
                String pwd = editText_regPwd.getText().toString();
                presenterInterface.toReg(phone , pwd);
            }
        });
    }

    @Override
    public void reFreshReg(String info) {
        Toast.makeText(this , info , Toast.LENGTH_SHORT).show();
        startActivity(new Intent(this , LoginActivity.class));
        finish();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterInterface.fnish();
        presenterInterface = null;

    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mvp.view.RegActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <EditText
            android:id="@+id/ed_reg_phone_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入手机号"
            />
        <EditText
            android:id="@+id/ed_reg_pwd_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入密码"
            />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            >

            <Button
                android:id="@+id/but_ok_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="完成"
                />


        </LinearLayout>
        
    </LinearLayout>


</android.support.constraint.ConstraintLayout>

3 FragmentActivity

package yanjupeng20190404.myapplication.mvp.view;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.hjm.bottomtabbar.BottomTabBar;

import yanjupeng20190404.myapplication.R;
import yanjupeng20190404.myapplication.fragment.AFragment;
import yanjupeng20190404.myapplication.fragment.BFragment;
import yanjupeng20190404.myapplication.fragment.CFragment;

public class FragmentActivity extends AppCompatActivity {

    public BottomTabBar bottomTabBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);
        bottomTabBar = findViewById(R.id.bottomTabBar_id);
        bottomTabBar.init(getSupportFragmentManager())
                .setChangeColor(Color.RED  ,  Color.BLUE)
                .setFontSize(40)
                .setTabBarBackgroundColor(Color.YELLOW)
                .addTabItem("首页" , R.mipmap.ic_launcher , AFragment.class)
                .addTabItem("购物车" , R.mipmap.ic_launcher , BFragment.class)
                .addTabItem("我的" , R.mipmap.ic_launcher , CFragment.class);


    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mvp.view.FragmentActivity">

    <com.hjm.bottomtabbar.BottomTabBar
        android:id="@+id/bottomTabBar_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.hjm.bottomtabbar.BottomTabBar>


</android.support.constraint.ConstraintLayout>

3-1  Afragment

package yanjupeng20190404.myapplication.fragment;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import yanjupeng20190404.myapplication.R;

public class AFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = LayoutInflater.from(container.getContext()).inflate(R.layout.fragment_a_layout, null);

        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);


    }
}

3-2 Bfragment

package yanjupeng20190404.myapplication.fragment;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
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.CompoundButton;
import android.widget.TextView;

import yanjupeng20190404.myapplication.R;
import yanjupeng20190404.myapplication.adapter.MyAdapter1;
import yanjupeng20190404.myapplication.bean.Bean;
import yanjupeng20190404.myapplication.cont.Cont;
import yanjupeng20190404.myapplication.mvp.presenter.Presenter;

public class BFragment extends Fragment implements Cont.BfragmentInterface {

    public RecyclerView recyclerView;
    public Cont.PresenterInterface presenterInterface;
    public MyAdapter1 adapter;

    public CheckBox checkBox;
    public TextView textView , pay;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = LayoutInflater.from(container.getContext()).inflate(R.layout.fragment_b_layout, null);

        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        recyclerView = view.findViewById(R.id.recyclerView_id);
        checkBox = view.findViewById(R.id.checkbox_all_id);
        textView = view.findViewById(R.id.price_all_id);
        pay = view.findViewById(R.id.pay_all_id);
        presenterInterface = new Presenter<>(this);
        presenterInterface.toDate();
        LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);

    }

    @Override
    public void reFrreshBfragmnet(Object o) {
        final Bean bean = (Bean) o;

        adapter = new MyAdapter1(bean.data);
        recyclerView.setAdapter(adapter);

        adapter.setOnSumPriceClickListenner(new MyAdapter1.OnSumPriceClickListenner() {
            @Override
            public void onSumPriceClick() {
                int price = 0;
                for (Bean.DateBean dateBean : bean.data){
                    for (Bean.DateBean.DateList dateList : dateBean.list){
                        if (dateList.selected2){
                            price += dateList.price;
                        }

                    }
                }
                textView.setText("总价 : ¥" + price);
            }
        });
        adapter.setOnSumCheckClickListener(new MyAdapter1.OnSumCheckClickListener() {
            @Override
            public void onSumCheckClick() {
                boolean b = true;
                for (Bean.DateBean dateBean : bean.data){
                    for (Bean.DateBean.DateList dateList : dateBean.list){
                        if (!(dateList.selected2)){
                            b = false;
                        }
                    }
                }
                checkBox.setChecked(b);
            }
        });
        checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int price = 0;
                for (Bean.DateBean dateBean : bean.data){
                    for (Bean.DateBean.DateList dateList : dateBean.list){
                        if (checkBox.isChecked()){
                            dateBean.selected1 = true;
                            dateList.selected2 = true;
                            price += dateList.price;
                        }else {
                            dateBean.selected1 = false;
                            dateList.selected2 = false;
                        }
                    }
                }
                textView.setText("总价 : ¥" + price);
                adapter.notifyDataSetChanged();
            }
        });



    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView_id"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="6"></android.support.v7.widget.RecyclerView>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal"
            >

            <CheckBox
                android:id="@+id/checkbox_all_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/price_all_id"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="总价: ¥"
                android:layout_weight="1"
                android:layout_marginLeft="20dp"
                />

            <TextView
                android:id="@+id/pay_all_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="支付"
                android:textSize="20dp"
                android:background="#ff0"
                android:layout_marginRight="20dp"
                />

        </LinearLayout>

    </LinearLayout>



</android.support.constraint.ConstraintLayout>

3-3  CFragment

package yanjupeng20190404.myapplication.fragment;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;

import java.util.ArrayList;
import java.util.List;

import yanjupeng20190404.myapplication.R;
import yanjupeng20190404.myapplication.bean.UserBean;
import yanjupeng20190404.myapplication.cont.Cont;
import yanjupeng20190404.myapplication.mvp.model.Model;
import yanjupeng20190404.myapplication.mvp.presenter.Presenter;

public class CFragment extends Fragment {

    public ImageView imageView_userImg;

    public TextView textView_userName;

    public Cont.PresenterInterface presenterInterface;



    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = LayoutInflater.from(container.getContext()).inflate(R.layout.fragment_c_layout, null);

        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        imageView_userImg = view.findViewById(R.id.img_user_id);
        textView_userName = view.findViewById(R.id.name_user_id);

        String name = getActivity().getIntent().getStringExtra("name");
        String img = getActivity().getIntent().getStringExtra("img");
        Log.e("tag" , "img  " +img);
        textView_userName.setText(name);
        RoundedCorners roundedCorners= new RoundedCorners(100);
        Glide.with(this).load(img).apply(RequestOptions.bitmapTransform(roundedCorners)).into(imageView_userImg);


    }



}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="40dp"
        android:gravity="center"
        >
        <ImageView
            android:id="@+id/img_user_id"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@mipmap/ic_launcher"
            />
        <TextView
            android:id="@+id/name_user_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登录"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"
            />

        <yanjupeng20190404.myapplication.WaterView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />


    </LinearLayout>

</android.support.constraint.ConstraintLayout>

MVP

以上部分是V层

P层

package yanjupeng20190404.myapplication.mvp.presenter;

import android.util.Log;

import java.util.HashMap;
import java.util.Map;

import yanjupeng20190404.myapplication.cont.Cont;
import yanjupeng20190404.myapplication.mvp.model.Model;

public class Presenter<T> implements Cont.PresenterInterface ,Cont.ModelUserInterface {

    public Model model;
    public T t;
    public Presenter(T t){
        model = new Model(this);
        this.t = t;
    }

    @Override
    public void toLogin(String phone, String pwd) {
        String urlString = "http://172.17.8.100/small/user/v1/login";
        Map<String , String> map = new HashMap<>();
        map.put("phone" , phone);
        map.put("pwd" , pwd);
        model.getUser(urlString , map);
        model.setTapy(0);

    }

    @Override
    public void toReg(String phone, String pwd) {
        String urlString = "http://172.17.8.100/small/user/v1/register";
        Map<String , String> map = new HashMap<>();
        map.put("phone" , phone);
        map.put("pwd" , pwd);
        model.getUser(urlString , map);
        model.setTapy(1);
    }

    @Override
    public void toDate() {
        String urlString = "http://172.17.8.100/ks/product/getCarts?uid=51";
        model.getShow(urlString, new Cont.ModelShowInterface() {
            @Override
            public void succeShow(Object object) {
                ((Cont.BfragmentInterface)t).reFrreshBfragmnet(object);
            }

            @Override
            public void eroorShow(String string) {

            }
        },0);
    }

    @Override
    public void toPid(int pid) {
        Log.e("tag" ,"toPid  " + pid);
        String urlString = "http://172.17.8.100/ks/product/getProductDetail?pid="+pid;
        model.getShow(urlString, new Cont.ModelShowInterface() {
            @Override
            public void succeShow(Object object) {
                ((Cont.PidShowInterface)t).toPid(object);
            }

            @Override
            public void eroorShow(String string) {
            }
        },1);
    }



    @Override
    public void fnish() {
        if (t != null){
            t = null;
        }
    }

    @Override
    public void succeUser(Object o, Object object,Object object1,Object object2) {
        int arg = (int) o;
        String json = (String) object;
        if (arg == 0){
            ((Cont.LoginViewInterface)t).refreshLogin(json,object1,object2);
        }else {
            ((Cont.RegViewInterface)t).reFreshReg(json);
        }


    }

    @Override
    public void eroorUser(String string) {

    }
}

M层

package yanjupeng20190404.myapplication.mvp.model;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.google.gson.Gson;
import com.google.gson.JsonObject;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import yanjupeng20190404.myapplication.bean.Bean;
import yanjupeng20190404.myapplication.bean.BeanPid;
import yanjupeng20190404.myapplication.bean.UserBean;
import yanjupeng20190404.myapplication.cont.Cont;
import yanjupeng20190404.myapplication.utils.Utils;

public class Model {

    public int tapy;


    public Cont.ModelUserInterface modelUserInterface;
    public Cont.ModelShowInterface modelShowInterface ,modelShowInterface_1;
    public Model(Cont.ModelUserInterface modelUserInterface){
        this.modelUserInterface = modelUserInterface;

    }
    //登录注册
    public Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int arg1 = msg.arg1;

            if (arg1 == -1){
                modelUserInterface.eroorUser("失败");
            }else {

                try {
                    String json = (String) msg.obj;
                    JSONObject jsonObject = new JSONObject(json);
                    String meage = jsonObject.getString("message");

                    JSONObject result1 = jsonObject.getJSONObject("result");
                    String nickName = result1.getString("nickName");
                    String headPic = result1.getString("headPic");
                    
//                    userInterface.setUserList(nickName , headPic);
                    if (tapy == 0){
                        modelUserInterface.succeUser(tapy , meage,nickName,headPic);
                    }else {
                        modelUserInterface.succeUser(tapy , meage,null,null);
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

        }
    };
    //展示
    public Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);


            int tapyShow = msg.arg1;
            if (tapyShow == 0){
                String json = (String) msg.obj;
                Gson gson = new Gson();
                Bean bean = gson.fromJson(json, Bean.class);
                modelShowInterface.succeShow(bean);
            }else {
                String json = (String) msg.obj;
                Gson gson = new Gson();
                Log.e("tag", "tapyShow222" +json);
                BeanPid beanPid = gson.fromJson(json, BeanPid.class);
                modelShowInterface_1.succeShow(beanPid);
            }
        }
    };

    //登录注册
    public void getUser(String urlString , Map<String , String> map){
        Utils.getInstnsce().doPost(urlString , map , handler);
    }
    public void setTapy(int tapy){
        this.tapy = tapy;
    }

    public void getShow(String urlString , Cont.ModelShowInterface modelShowInterface , int tapyShow){
        if (tapyShow == 0){
            this.modelShowInterface = modelShowInterface;
        }else {
            this.modelShowInterface_1 = modelShowInterface;
        }
        Utils.getInstnsce().doGet(urlString , mHandler , tapyShow);
    }

//    public UserInterface userInterface;
//
//    public void setUserInterface(UserInterface userInterface){
//        this.userInterface = userInterface;
//    }
//
//    public interface UserInterface{
//        public void setUserList(String string , String string1);
//    }

}

Bean类

package yanjupeng20190404.myapplication.bean;

import java.util.List;

public class Bean {

    public List<DateBean> data;

    public static class DateBean{
        public String sellerName;
        public Boolean selected1 = false;

        public List<DateList> list;
        public static class DateList{
            public String detailUrl;
            public int num;
            public int price;
            public String title;
            public int pid;
            public Boolean selected2 = false;

        }
    }

}
package yanjupeng20190404.myapplication.bean;

public class BeanPid {


    /**
     * msg :
     * seller : {"description":"我是商家1","icon":"http://120.27.23.105/images/icon.png","name":"商家1","productNums":999,"score":4.9,"sellerid":1}
     * code : 0
     * data : {"bargainPrice":22.9,"createtime":"2017-10-14T21:48:08","detailUrl":"http://172.17.8.100/images/small/commodity/xbsd/sjb/5/1.jpg","images":"http://172.17.8.100/images/small/commodity/xbsd/sjb/5/1.jpg","itemtype":2,"pid":24,"price":288,"pscid":2,"salenum":90,"sellerid":1,"subhead":"三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》","title":"三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋"}
     */


    private DataBean data;


    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class SellerBean {
        /**
         * description : 我是商家1
         * icon : http://120.27.23.105/images/icon.png
         * name : 商家1
         * productNums : 999
         * score : 4.9
         * sellerid : 1
         */

        private String description;
        private String icon;
        private String name;
        private int productNums;
        private double score;
        private int sellerid;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getIcon() {
            return icon;
        }

        public void setIcon(String icon) {
            this.icon = icon;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getProductNums() {
            return productNums;
        }

        public void setProductNums(int productNums) {
            this.productNums = productNums;
        }

        public double getScore() {
            return score;
        }

        public void setScore(double score) {
            this.score = score;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }
    }

    public static class DataBean {
        /**
         * bargainPrice : 22.9
         * createtime : 2017-10-14T21:48:08
         * detailUrl : http://172.17.8.100/images/small/commodity/xbsd/sjb/5/1.jpg
         * images : http://172.17.8.100/images/small/commodity/xbsd/sjb/5/1.jpg
         * itemtype : 2
         * pid : 24
         * price : 288
         * pscid : 2
         * salenum : 90
         * sellerid : 1
         * subhead : 三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》
         * title : 三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋
         */

        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private int price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;

        public double getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getDetailUrl() {
            return detailUrl;
        }

        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public int getItemtype() {
            return itemtype;
        }

        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }

        public int getPid() {
            return pid;
        }

        public void setPid(int pid) {
            this.pid = pid;
        }

        public int getPrice() {
            return price;
        }

        public void setPrice(int price) {
            this.price = price;
        }

        public int getPscid() {
            return pscid;
        }

        public void setPscid(int pscid) {
            this.pscid = pscid;
        }

        public int getSalenum() {
            return salenum;
        }

        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }

        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }
    }
}

工具类

package yanjupeng20190404.myapplication.utils;

import android.os.Handler;
import android.os.Message;

import java.io.IOException;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class Utils {


    public static Utils utils;

    public OkHttpClient client;

    private Utils(){
        client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request();
                Response response = chain.proceed(request);
                return response;
            }
        }).build();
    }
    public static synchronized Utils getInstnsce(){
        if (utils == null){
            utils = new Utils();
        }
        return utils;
    }
    public void doPost(String urlString , Map<String , String> map , final Handler handler){
        FormBody.Builder builder = new FormBody.Builder();
        for (String key : map.keySet()){
            builder.add(key , map.get(key));
        }
        RequestBody body = builder.build();

        Request request = new Request.Builder()
                .url(urlString)
                .post(body)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                String eroorJson = e.getMessage();
                Message message = new Message();
                message.obj = eroorJson;
                message.arg1 = -1;
                handler.sendMessage(message);

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String json = response.body().string();
                Message message = new Message();
                message.obj = json;
                message.arg1 = 1;
                handler.sendMessage(message);
            }
        });
    }

    public void doGet(String urlString , final Handler handler , final int tapyShow){
        Request request = new Request.Builder()
                .url(urlString)
                .get()
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String json = response.body().string();
                Message message = new Message();
                message.obj = json;
                message.arg1 = tapyShow;
                handler.sendMessage(message);
            }
        });


    }


}

商品详情

package yanjupeng20190404.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

import yanjupeng20190404.myapplication.adapter.MyAdapter1;
import yanjupeng20190404.myapplication.adapter.MyPidAdapter;
import yanjupeng20190404.myapplication.bean.BeanPid;
import yanjupeng20190404.myapplication.cont.Cont;
import yanjupeng20190404.myapplication.mvp.presenter.Presenter;

public class PidActivity extends AppCompatActivity  implements Cont.PidShowInterface {

    public RecyclerView recyclerView;
    public Cont.PresenterInterface presenterInterface;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pid);

        int pid1 = getIntent().getIntExtra("pid", 0);

        presenterInterface = new Presenter<>(this);
        presenterInterface.toPid(pid1);

        recyclerView = findViewById(R.id.RecyclerView_pid_id);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);


    }
    @Override
    public void toPid(Object o) {

        BeanPid data = (BeanPid) o;
        List<BeanPid.DataBean> list = new ArrayList<>();
        list.add(data.getData());
        MyPidAdapter pidAdapter = new MyPidAdapter(list);
        recyclerView.setAdapter(pidAdapter);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterInterface.fnish();
        presenterInterface = null;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".PidActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/RecyclerView_pid_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>

</android.support.constraint.ConstraintLayout>

水波图

package yanjupeng20190404.myapplication;

import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.LinearInterpolator;

public class WaterView extends View {


    int w = 0;

    int hh = 0;
    int h = 0;

    Paint paint = new Paint();

    public WaterView(Context context) {
        super(context);
    }

    public WaterView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.RED);
    }

    public WaterView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        hh = getMeasuredHeight();
        w = getMeasuredWidth();
        h = hh/2;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Path path = new Path();
        path.moveTo(-w + x , h);
        path.quadTo(-w/4*3 + x  ,h-60 , -w/2 + x , h );
        path.quadTo(-w/4 + x , h + 60 , 0 + x ,h);
        path.quadTo(w/4  + x, h-60 , w/2 + x , h);
        path.quadTo(w/4*3 + x , h + 60 ,w + x ,h );
        path.lineTo(w , hh);
        path.lineTo(0,hh);
        path.close();
        canvas.drawPath(path , paint);

        if(isgoing){
            startAnimation();
        }
    }


    int x = 0;
    boolean isgoing = true;
    ValueAnimator mAnimator;
    private void startAnimation() {
        isgoing = false;
        mAnimator = ValueAnimator.ofInt(0, w);
        mAnimator.setDuration(5000);
        mAnimator.setRepeatCount(ValueAnimator.INFINITE);
        mAnimator.setInterpolator(new LinearInterpolator());
        mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {

                x = (int) animation.getAnimatedValue();
                //          Log.e("tag" ,"xxxxx = " + x);
                postInvalidate();
            }
        });

        mAnimator.start();
    }



}

适配器购物车

package yanjupeng20190404.myapplication.adapter;

import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
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 android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

import yanjupeng20190404.myapplication.PidActivity;
import yanjupeng20190404.myapplication.R;
import yanjupeng20190404.myapplication.bean.Bean;
import yanjupeng20190404.myapplication.cont.Cont;

public class MyAdapter1 extends RecyclerView.Adapter<MyAdapter1.Hodel>{

    public Context mContext;
    public List<Bean.DateBean> list;

    public  MyAdapter2 adapter2;
    public MyAdapter1(List<Bean.DateBean> list){
        this.list = list;
    }

    public Cont.PresenterInterface presenterInterface;
    int pid;

    @NonNull
    @Override
    public Hodel onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        mContext = viewGroup.getContext();
        View view = LayoutInflater.from(mContext).inflate(R.layout.adapter_1_layout, null);
        return new Hodel(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final Hodel hodel, final int i) {
        if (list.get(i).selected1){
            hodel.checkBox_fu.setChecked(true);
        }else {
            hodel.checkBox_fu.setChecked(false);
        }



        hodel.textView_name.setText(list.get(i).sellerName);
        LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        hodel.recyclerView.setLayoutManager(layoutManager);
        adapter2 = new MyAdapter2(list.get(i).list);
        hodel.recyclerView.setAdapter(adapter2);




        adapter2.setOnPidClickListener(new MyAdapter2.OnPidClickListener() {
            @Override
            public void onPidClick(int pid) {


//                onPidMyAdapter1ClickListnner.onPidMyAdapter1Click(pid);


            }
        });


//        Boolean b = true;
//        for (Bean.DateBean.DateList dataBean : list.get(i).list){
//            if (!dataBean.selected2){
//                b = false;
//            }
//        }
//        hodel.checkBox_fu.setChecked(b);



        adapter2.setOnCheckClickListener(new MyAdapter2.OnCheckClickListener() {
            @Override
            public void onCheckClick() {
                boolean b = true;
                for (Bean.DateBean.DateList dateList : list.get(i).list){
                    if (!dateList.selected2){
                        b = false;
                    }
                }
                onSumCheckClickListener.onSumCheckClick();
                onSumPriceClickListenner.onSumPriceClick();
                hodel.checkBox_fu.setChecked(b);
            }
        });
        hodel.checkBox_fu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (Bean.DateBean.DateList dateList : list.get(i).list){
                    if (hodel.checkBox_fu.isChecked()){
                        dateList.selected2 = true;
                    }else {
                        dateList.selected2 = false;
                    }
                }
                onSumCheckClickListener.onSumCheckClick();
                onSumPriceClickListenner.onSumPriceClick();
                adapter2.notifyDataSetChanged();
            }
        });

        adapter2.setOnPriceClickListener(new MyAdapter2.OnPriceClickListener() {
            @Override
            public void onPriceClick() {
                onSumPriceClickListenner.onSumPriceClick();
            }
        });
        adapter2.setOnEdClickListener(new MyAdapter2.OnEdClickListener() {
            @Override
            public void onEdClick(int postion, int cont) {
            }
        });




    }

    @Override
    public int getItemCount() {
        if (list != null){
            return list.size();
        }
        return 0;
    }




    public class Hodel extends RecyclerView.ViewHolder{
        public CheckBox checkBox_fu;
        public TextView textView_name;
        public RecyclerView recyclerView ;
        public LinearLayout linearLayout;
        public Hodel(@NonNull View itemView) {
            super(itemView);
            checkBox_fu = itemView.findViewById(R.id.checkbox_fu);
            textView_name = itemView.findViewById(R.id.shangjia_id);
            recyclerView = itemView.findViewById(R.id.recyclerView_2_id);
            linearLayout = itemView.findViewById(R.id.linearLayout_id);
        }
    }


    public OnSumCheckClickListener onSumCheckClickListener;

    public void setOnSumCheckClickListener(OnSumCheckClickListener onSumCheckClickListener){
        this.onSumCheckClickListener = onSumCheckClickListener;
    }
    public interface OnSumCheckClickListener{
        public void onSumCheckClick();
    }

    public OnSumPriceClickListenner onSumPriceClickListenner;
    public void setOnSumPriceClickListenner(OnSumPriceClickListenner onSumPriceClickListenner){
        this.onSumPriceClickListenner = onSumPriceClickListenner;
    }

    public interface OnSumPriceClickListenner{
        public void onSumPriceClick();
    }

//    public OnPidMyAdapter1ClickListnner onPidMyAdapter1ClickListnner;
//
//    public void setOnPidMyAdapter1ClickListnner(OnPidMyAdapter1ClickListnner onPidMyAdapter1ClickListnner){
//        this.onPidMyAdapter1ClickListnner = onPidMyAdapter1ClickListnner;
//    }
//
//    public interface OnPidMyAdapter1ClickListnner{
//        public void onPidMyAdapter1Click(int pid);
//
//    }

}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <LinearLayout
        android:id="@+id/linearLayout_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:visibility="visible"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            >
            <CheckBox
                android:id="@+id/checkbox_fu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <TextView
                android:id="@+id/shangjia_id"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="商家名称"
                android:paddingLeft="20dp"
                />
        </LinearLayout>


        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView_2_id"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="40dp"></android.support.v7.widget.RecyclerView>


    </LinearLayout>





</android.support.constraint.ConstraintLayout>
package yanjupeng20190404.myapplication.adapter;

import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
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.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.FitCenter;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;

import java.util.List;

import yanjupeng20190404.myapplication.PidActivity;
import yanjupeng20190404.myapplication.R;
import yanjupeng20190404.myapplication.bean.Bean;

public class MyAdapter2 extends RecyclerView.Adapter<MyAdapter2.Hodel> {

    public Context mContext;
    public List<Bean.DateBean.DateList> list;
    public MyAdapter2(List<Bean.DateBean.DateList> list){
        this.list = list;
    }


    @NonNull
    @Override
    public Hodel onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        mContext = viewGroup.getContext();
        View view = LayoutInflater.from(mContext).inflate(R.layout.adapter_2_layout, null);
        return new Hodel(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final Hodel hodel, final int i) {
        hodel.name.setText(list.get(i).title);
        hodel.price.setText(list.get(i).price+"");
        int cont = list.get(i).num;
        hodel.cont.setText(list.get(i).num+"");

        RoundedCorners roundedCorners= new RoundedCorners(20);
        Glide.with(mContext).load(list.get(i).detailUrl).apply(RequestOptions.bitmapTransform(roundedCorners)).into(hodel.img);
        if (list.get(i).selected2){
            onCheckClickListener.onCheckClick();
            onPriceClickListener.onPriceClick();
            hodel.checkBox_zhi.setChecked(true);
        }else {
            hodel.checkBox_zhi.setChecked(false);
        }
        hodel.checkBox_zhi.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (hodel.checkBox_zhi.isChecked()){
                        list.get(i).selected2 = true;
                    }else {
                        list.get(i).selected2 = false;
                    }
                onCheckClickListener.onCheckClick();
                onPriceClickListener.onPriceClick();
            }
        });

        final int price11 = list.get(i).price / cont;
        hodel.add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int cont = list.get(i).num + 1;
                if (onEdClickListener != null){
                    onEdClickListener.onEdClick(i , cont);
                }
                list.get(i).num = cont;
                list.get(i).price = list.get(i).price +price11;
                notifyDataSetChanged();

            }
        });
        hodel.del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (list.get(i).num > 1){
                    int cont = list.get(i).num - 1;
                    if (onEdClickListener != null){
                        onEdClickListener.onEdClick(i , cont);
                    }
                    list.get(i).num = cont;
                    list.get(i).price =list.get(i).price - price11;
                    notifyDataSetChanged();
                }
            }
        });
        hodel.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(mContext, PidActivity.class);
                intent.putExtra("pid" , list.get(i).pid);

                mContext.startActivity(intent);

//                onPidClickListener.onPidClick(list.get(i).pid);
            }
        });

    }

    @Override
    public int getItemCount() {
        if (list != null){
            return list.size();
        }
        return 0;
    }

    public class Hodel extends RecyclerView.ViewHolder{

        public CheckBox checkBox_zhi ;

        public TextView name , price , add , cont , del ;
        public ImageView img;

        public Hodel(@NonNull View itemView) {
            super(itemView);
            checkBox_zhi = itemView.findViewById(R.id.checkbox_zhi_id);
            name = itemView.findViewById(R.id.name_id);
            price = itemView.findViewById(R.id.price_id);
            add = itemView.findViewById(R.id.add_id);
            cont = itemView.findViewById(R.id.cont_id);
            del = itemView.findViewById(R.id.del_id);
            img = itemView.findViewById(R.id.img_id);
        }
    }

    public OnCheckClickListener onCheckClickListener;

    public void setOnCheckClickListener(OnCheckClickListener onCheckClickListener){
        this.onCheckClickListener = onCheckClickListener;
    }

    public interface OnCheckClickListener{
        public void onCheckClick();
    }

    public OnPriceClickListener onPriceClickListener;

    public void setOnPriceClickListener(OnPriceClickListener onPriceClickListener){
        this.onPriceClickListener = onPriceClickListener;
    }

    public interface OnPriceClickListener{
        public void onPriceClick();
    }


    public OnEdClickListener onEdClickListener;
    public void setOnEdClickListener(OnEdClickListener onEdClickListener){
        this.onEdClickListener = onEdClickListener;
    }


    public interface OnEdClickListener{
        public  void onEdClick(int postion , int cont);
    }

    public OnPidClickListener onPidClickListener;

    public void setOnPidClickListener(OnPidClickListener onPidClickListener){
        this.onPidClickListener = onPidClickListener;

    }
    public interface OnPidClickListener{
        public void onPidClick(int pid);
    }

}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        >
        <CheckBox
            android:id="@+id/checkbox_zhi_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <ImageView
            android:id="@+id/img_id"
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:src="@mipmap/ic_launcher"
            />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingLeft="20dp"
            >
            <TextView
                android:id="@+id/name_id"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="名称"
                />
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_marginTop="20dp"
                >
                <TextView
                android:id="@+id/price_id"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="价格:"
                android:layout_weight="1"
                />

                <TextView
                    android:id="@+id/add_id"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text=" + "
                    android:background="#ff44ff"
                    />
                <TextView
                    android:id="@+id/cont_id"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="20dp"
                    android:paddingRight="20dp"
                    android:text="12"
                    />
                <TextView
                    android:id="@+id/del_id"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="—"
                    android:background="#4ff"
                    />

            </LinearLayout>

        </LinearLayout>







    </LinearLayout>

</android.support.constraint.ConstraintLayout>

适配器详情

package yanjupeng20190404.myapplication.adapter;

import android.content.Context;
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.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;

import java.util.List;

import yanjupeng20190404.myapplication.R;
import yanjupeng20190404.myapplication.bean.BeanPid;

public class MyPidAdapter extends RecyclerView.Adapter<MyPidAdapter.Hodle> {


    public Context mContext;

    public List<BeanPid.DataBean> list;
    public MyPidAdapter(List<BeanPid.DataBean> list){
        this.list = list;
    }

    @NonNull
    @Override
    public Hodle onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        mContext = viewGroup.getContext();

        View view = LayoutInflater.from(mContext).inflate(R.layout.adapter_pid_layout, null);

        return new Hodle(view);
    }

    @Override
    public void onBindViewHolder(@NonNull Hodle hodle, int i) {
        hodle.textView_name.setText(list.get(i).getTitle());
        hodle.textView_price.setText(list.get(i).getPrice()+"");
        RoundedCorners roundedCorners= new RoundedCorners(90);
        Glide.with(mContext).load(list.get(i).getDetailUrl()).apply(RequestOptions.bitmapTransform(roundedCorners)).into(hodle.imageView);
    }

    @Override
    public int getItemCount() {
        if (list != null){
            return list.size();
        }
        return 0;
    }

    public class Hodle extends RecyclerView.ViewHolder{

        public ImageView imageView;
        public TextView textView_name , textView_price;
        public Hodle(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.pid_img_id);
            textView_name = itemView.findViewById(R.id.pid_name_id);
            textView_price = itemView.findViewById(R.id.pid_price_id);
        }
    }


}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <ImageView
            android:id="@+id/pid_img_id"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:src="@mipmap/ic_launcher"/>

        <TextView
            android:id="@+id/pid_name_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="姓名"
            />
        <TextView
            android:id="@+id/pid_price_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="价格"
            />


    </LinearLayout>

</android.support.constraint.ConstraintLayout>

要的依赖

implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.okhttp3:okhttp-ws:3.4.2'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.hjm:BottomTabBar:1.0.0'

猜你喜欢

转载自blog.csdn.net/qq_42886907/article/details/89060177