MVP框架 Bean类 工具包 以及自定义控件 与购物车的相同
实现效果
图片上的效果为两个RecyclerView
1.MainActivity页面
package com.example.elemo;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.TextView;
import com.example.adapter.LeftAdapter;
import com.example.adapter.RightAdapter;
import com.example.bean.Bean;
import com.example.bean.Result;
import com.example.bean.Shop;
import com.example.core.BaseCall;
import com.example.presenter.MyPresenter;
import java.util.List;
public class MainActivity extends AppCompatActivity implements BaseCall{
private TextView mSumPrice;
private TextView mCount;
private RecyclerView mLeftRecycler,mRightRecycler;
private LeftAdapter mLeftAdapter;
private RightAdapter mRightAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSumPrice = findViewById(R.id.goods_sum_price);
mCount = findViewById(R.id.goods_number);
mLeftRecycler = findViewById(R.id.left_recycler);
mRightRecycler = findViewById(R.id.right_recycler);
mLeftRecycler.setLayoutManager(new LinearLayoutManager(this));
mRightRecycler.setLayoutManager(new LinearLayoutManager(this));
mLeftAdapter = new LeftAdapter();
mLeftAdapter.setOnItemClickListenter(new LeftAdapter.OnItemClickListenter() {
@Override
public void onItemClick(Shop shop) {
mRightAdapter.clearList();//清空数据
mRightAdapter.addAll(shop.getList());
mRightAdapter.notifyDataSetChanged();
}
});
mLeftRecycler.setAdapter(mLeftAdapter);
mRightAdapter = new RightAdapter();
mRightAdapter.setOnNumListener(new RightAdapter.OnNumListener() {
@Override
public void onNum() {
calculatePrice(mLeftAdapter.getList());
}
});
mRightRecycler.setAdapter(mRightAdapter);
new MyPresenter(this).getData();
}
@Override
public void loadSuccess(Object data) {
List<Shop> data1 = (List<Shop>) data;
calculatePrice(data1);//计算价格和数量
mLeftAdapter.addAll(data1);//左边的添加类型
//得到默认选中的shop,设置上颜色和背景
Shop shop = data1.get(1);
shop.setTextColor(0xff000000);
shop.setBackground(R.color.white);
mRightAdapter.addAll(shop.getList());
mLeftAdapter.notifyDataSetChanged();
mRightAdapter.notifyDataSetChanged();
}
@Override
public void loadError(Result result) {
}
/**
* @author dingtao
* @date 2018/12/18 7:01 PM
* 计算总价格
*/
private void calculatePrice(List<Shop> shopList){
double totalPrice=0;
int totalNum = 0;
for (int i = 0; i < shopList.size(); i++) {//循环的商家
Shop shop = shopList.get(i);
for (int j = 0; j < shop.getList().size(); j++) {
Bean goods = shop.getList().get(j);
//计算价格
totalPrice = totalPrice + goods.getNum() * goods.getPrice();
totalNum+=goods.getNum();//计数
}
}
mSumPrice.setText("价格:"+totalPrice);
mCount.setText(""+totalNum);
}
}
2.左边RecyclerView的适配器
package com.example.adapter;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.bean.Shop;
import com.example.elemo.R;
import java.util.ArrayList;
import java.util.List;
/**
* @author dingtao
* @date 2018/12/19 10:56
* qq:1940870847
*/
public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.MyHolder> {
private List<Shop> mList = new ArrayList<>();
public void addAll(List<Shop> list){
mList.addAll(list);
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(viewGroup.getContext(), R.layout.recycler_left_item,null);
MyHolder myHolder = new MyHolder(view);
return myHolder;
}
@Override
public void onBindViewHolder(@NonNull final MyHolder myHolder, int i) {
final Shop shop = mList.get(i);
myHolder.text.setText(shop.getSellerName());
myHolder.text.setBackgroundResource(shop.getBackground());
myHolder.text.setTextColor(shop.getTextColor());
myHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int j = 0; j <mList.size() ; j++) {
mList.get(j).setTextColor(0xffffffff);
mList.get(j).setBackground(R.color.grayblack);
}
shop.setBackground(R.color.white);
shop.setTextColor(0xff000000);
notifyDataSetChanged();
onItemClickListenter.onItemClick(shop);//切换右边的列表
}
});
}
@Override
public int getItemCount() {
return mList.size();
}
public List<Shop> getList() {
return mList;
}
class MyHolder extends RecyclerView.ViewHolder{
TextView text;
public MyHolder(@NonNull View itemView) {
super(itemView);
text = itemView.findViewById(R.id.left_text);
}
}
private OnItemClickListenter onItemClickListenter;
public void setOnItemClickListenter(OnItemClickListenter onItemClickListenter) {
this.onItemClickListenter = onItemClickListenter;
}
public interface OnItemClickListenter{
void onItemClick(Shop shop);
}
}
3.右边RecyclerView的适配器
package com.example.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.app.MyApp;
import com.example.bean.Bean;
import com.example.elemo.R;
import com.example.view.AddSubLayout;
import java.util.ArrayList;
import java.util.List;
/**
* @author dingtao
* @date 2018/12/19 10:56
* qq:1940870847
*/
public class RightAdapter extends RecyclerView.Adapter<RightAdapter.ChildHolder> {
private List<Bean> mList = new ArrayList<>();
public void addAll(List<Bean> list) {
mList.addAll(list);
}
@NonNull
@Override
public ChildHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = View.inflate(viewGroup.getContext(), R.layout.recycler_right_item, null);
ChildHolder myHolder = new ChildHolder(view);
return myHolder;
}
@Override
public void onBindViewHolder(@NonNull ChildHolder childHolder, int position) {
final Bean goods = mList.get(position);
childHolder.text.setText(goods.getTitle());
childHolder.price.setText("单价:" + goods.getPrice());//单价
String imageurl = "https" + goods.getImages().split("https")[1];
Log.i("dt", "imageUrl: " + imageurl);
imageurl = imageurl.substring(0, imageurl.lastIndexOf(".jpg") + ".jpg".length());
Glide.with(MyApp.getContext()).load(imageurl).into(childHolder.image);//加载图片
childHolder.addSub.setCount(goods.getNum());//设置商品数量
childHolder.addSub.setAddSubListener(new AddSubLayout.AddSubListener() {
@Override
public void addSub(int count) {
goods.setNum(count);
onNumListener.onNum();//计算价格
}
});
}
@Override
public int getItemCount() {
return mList.size();
}
public void clearList() {
mList.clear();
}
class ChildHolder extends RecyclerView.ViewHolder {
TextView text;
TextView price;
ImageView image;
AddSubLayout addSub;
public ChildHolder(@NonNull View itemView) {
super(itemView);
text = itemView.findViewById(R.id.text);
price = itemView.findViewById(R.id.text_price);
image = itemView.findViewById(R.id.image);
addSub = itemView.findViewById(R.id.add_sub_layout);
}
}
private OnNumListener onNumListener;
public void setOnNumListener(OnNumListener onNumListener) {
this.onNumListener = onNumListener;
}
public interface OnNumListener{
void onNum();
}
}
4.自定义一个类继承Application 写一个全局的上下文
package com.example.app;
import android.app.Application;
import android.content.Context;
/**
* Created by 。 on 2018/12/20.
*/
public class MyApp extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
}
public static Context getContext(){
return context;
}
}
切记一定要在清单文件中声明一下
<application
android:name="com.example.app.MyApp"