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'