main:
public class MainActivity extends AppCompatActivity implements DataCall> {
private TextView mSumPrice;
private TextView mCount;
private RecyclerView mLeftRecycler,mRightRecycler;
private LeftAdapter mLeftAdapter;
private RightAdapter mRightAdapter;
private CartPresenter cartPresenter = new CartPresenter(this);
@Override
protected void onCreate(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);
cartPresenter.requestData();
}
@Override
public void success(List data) {
calculatePrice(data);//计算价格和数量
mLeftAdapter.addAll(data);//左边的添加类型
//得到默认选中的shop,设置上颜色和背景
Shop shop = data.get(1);
shop.setTextColor(0xff000000);
shop.setBackground(R.color.white);
mRightAdapter.addAll(shop.getList());
mLeftAdapter.notifyDataSetChanged();
mRightAdapter.notifyDataSetChanged();
}
@Override
public void fail(Result result) {
Toast.makeText(this, result.getCode() + " " + result.getMsg(), Toast.LENGTH_LONG).show();
}
/**
* @author dingtao
* @date 2018/12/18 7:01 PM
* 计算总价格
*/
private void calculatePrice(List 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++) {
Goods goods = shop.getList().get(j);
//计算价格
totalPrice = totalPrice + goods.getNum() * goods.getPrice();
totalNum+=goods.getNum();//计数
}
}
mSumPrice.setText("价格:"+totalPrice);
mCount.setText(""+totalNum);
}
}
LeftAdapter:
public class LeftAdapter extends RecyclerView.Adapter {
private List mList = new ArrayList<>();
public void addAll(List 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 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);
}
}
RightAdapter:
public class RightAdapter extends RecyclerView.Adapter {
private List mList = new ArrayList<>();
public void addAll(List 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 Goods 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(MApp.getInstance()).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();
}
}
加减自定义view:
public class AddSubLayout extends LinearLayout implements View.OnClickListener {
private TextView mAddBtn,mSubBtn;
private TextView mNumText;
private AddSubListener addSubListener;
public AddSubLayout(Context context) {
super(context);
initView();
}
public AddSubLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public AddSubLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView(){
//加载layout布局,第三个参数ViewGroup一定写成this
View view = View.inflate(getContext(),R.layout.car_add_sub_layout,this);
mAddBtn = view.findViewById(R.id.btn_add);
mSubBtn = view.findViewById(R.id.btn_sub);
mNumText = view.findViewById(R.id.text_number);
mAddBtn.setOnClickListener(this);
mSubBtn.setOnClickListener(this);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
int width = r-l;//getWidth();
int height = b-t;//getHeight();
}
@Override
public void onClick(View v) {
int number = Integer.parseInt(mNumText.getText().toString());
switch (v.getId()){
case R.id.btn_add:
number++;
mNumText.setText(number+"");
break;
case R.id.btn_sub:
if (number==0){
Toast.makeText(getContext(),"数量不能小于0",Toast.LENGTH_LONG).show();
return;
}
number--;
mNumText.setText(number+"");
break;
}
if (addSubListener!=null){
addSubListener.addSub(number);
}
}
public void setCount(int count) {
mNumText.setText(count+"");
}
public void setAddSubListener(AddSubListener addSubListener) {
this.addSubListener = addSubListener;
}
public interface AddSubListener{
void addSub(int count);
}
}