自定义控件
package che.bawei.com.che.my;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import che.bawei.com.che.R;
public class MeView extends LinearLayout implements View.OnClickListener {
int sum = 1;
private Button text;
public MeView(Context context) {
super(context);
}
public MeView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.meview, this);
//找控件
Button jia = findViewById(R.id.me_jia);
text = findViewById(R.id.me_text);
Button jian = findViewById(R.id.me_jian);
//设置默认值1
text.setText(sum + "");
//点击事件
jia.setOnClickListener(this);
jian.setOnClickListener(this);
}
public MeView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.me_jia:
sum++;
text.setText(sum + "");
//适配器里做刷新
if (onSumItemClick != null) {
onSumItemClick.sumItemClick();
}
break;
case R.id.me_jian:
//判断不能小于一
if (sum > 1) {
sum--;
text.setText(sum + "");
//适配器里做刷新
if (onSumItemClick != null) {
onSumItemClick.sumItemClick();
}
}
break;
}
}
//接口回调
public interface OnSumItemClick {
void sumItemClick();
}
public OnSumItemClick onSumItemClick;
public void setOnSumItemClick(OnSumItemClick onSumItemClick) {
this.onSumItemClick = onSumItemClick;
}
}
Activity
package che.bawei.com.che;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import java.util.List;
import che.bawei.com.che.adapter.MyAdapter;
import che.bawei.com.che.my.SearchBean;
import che.bawei.com.che.presenter.SearchPresenter;
import che.bawei.com.che.view.SearchView;
public class MainActivity extends AppCompatActivity implements SearchView, View.OnClickListener {
private RecyclerView recycler;
private SearchPresenter presenter;
private String Url = "http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?keyword=板鞋&page=1&count=5";
private MyAdapter myAdapter;
private CheckBox checkBox;
private TextView cmoney;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
recycler = findViewById(R.id.main_recycler);
checkBox = findViewById(R.id.main_check);
cmoney = findViewById(R.id.main_text);
//checkBox点击事件
checkBox.setOnClickListener(this);
//设置样式
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recycler.setLayoutManager(linearLayoutManager);
//关联P
presenter = new SearchPresenter(this);
presenter.attach(this);
presenter.setTextData(Url);
}
//回调的值
@Override
public void SearchData(List<SearchBean.ResultBean> data) {
myAdapter = new MyAdapter(this, data);
recycler.setAdapter(myAdapter);
//根据条目里的CheckBox设置
myAdapter.setOncheckClick(new MyAdapter.OncheckClick() {
@Override
public void setBoolean(boolean check) {
checkBox.setChecked(check);
}
});
//总价
myAdapter.setOnMoneyClick(new MyAdapter.OnMoneyClick() {
@Override
public void getData(Integer money) {
cmoney.setText(money + "");
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.deach();
}
@Override
public void onClick(View v) {
//调用适配器里的全选/全不选的方法
switch (v.getId()) {
case R.id.main_check:
if (checkBox.isChecked()) {//根据当前状态装置
myAdapter.setisCheck(true);
} else {
myAdapter.setisCheck(false);
}
break;
}
}
}
Adapter
package che.bawei.com.che.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.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import che.bawei.com.che.R;
import che.bawei.com.che.my.MeView;
import che.bawei.com.che.my.SearchBean;
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<SearchBean.ResultBean> list;
private Map<String, Boolean> map = new HashMap<>();
//价格的map集合
private Map<Integer, Integer> map2 = new HashMap<>();
public MyAdapter(Context context, List<SearchBean.ResultBean> list) {
this.context = context;
this.list = list;
getCheck(false);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.meitem, null, false);
NumHolder numHolder = new NumHolder(view);
return numHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
//赋值
final NumHolder numHolder = (NumHolder) viewHolder;
numHolder.text.setText(list.get(i).getCommodityName());
numHolder.money.setText("$" + list.get(i).getPrice() + ".00");
Glide.with(context).load(list.get(i).getMasterPic()).into(numHolder.image);
//设置状态
String id = list.get(i).getCommodityId() + "";
numHolder.check.setChecked(map.get(id));
//根据条目里的CheckBox设置外面的
numHolder.check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*-------------------------------做价格的---------------------------------------------*/
//改变状态清空价格集合
map2.clear();
//刷新适配器
notifyDataSetChanged();
/*-----------------------------------------------------------------------------------*/
//获取id
String id2 = list.get(i).getCommodityId() + "";
//存入map
map.put(id2, numHolder.check.isChecked());
//设置状态
boolean isCheck = true;
//循环
for (String key : map.keySet()) {
Boolean aBoolean = map.get(key);
//判断是否有没选中的
if (!aBoolean) { //如果aBoolean是turn,!ture ==false,如果aBoolean是false,!false==ture
isCheck = false;
if (oncheckClick != null) {
oncheckClick.setBoolean(isCheck);
}
return;
}
}
if (isCheck) {
if (oncheckClick != null) {
oncheckClick.setBoolean(isCheck);
}
}
}
});
//价格
//点击加减刷新适配器
numHolder.myView.setOnSumItemClick(new MeView.OnSumItemClick() {
@Override
public void sumItemClick() {
notifyDataSetChanged();
}
});
//判断如果选中吧价格和数量存入集合中
if (numHolder.check.isChecked()) {
//获取数量
TextView text = numHolder.myView.findViewById(R.id.me_text);
String text2 = text.getText().toString();
//转化成Int类型
Integer sum = Integer.valueOf(text2);
//获取价格
int price = list.get(i).getPrice();
//存入集合
map2.put(price, sum);
//获取价格的方法
getMoney();
} else {
//在获取一遍
getMoney();
}
}
@Override
public int getItemCount() {
return list.size();
}
public class NumHolder extends RecyclerView.ViewHolder {
private final ImageView image;
private final TextView text;
private final TextView money;
private final che.bawei.com.che.my.MeView myView;
private final CheckBox check;
public NumHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.item_image);
text = itemView.findViewById(R.id.item_text);
money = itemView.findViewById(R.id.item_money);
myView = itemView.findViewById(R.id.item_sum);
check = itemView.findViewById(R.id.item_check);
}
}
//全选/全不选
public void setisCheck(boolean check) {
//改变状态清空价格集合
map2.clear();
//--------------------------------------
getCheck(check);
notifyDataSetChanged();
}
private void getCheck(boolean check) {
//去设置默认值
//id当键存入集合
map.clear();
for (int i = 0; i < list.size(); i++) {
String id = list.get(i).getCommodityId() + "";
map.put(id, check);
}
}
//获取价格
private void getMoney() {
//设置一个值
int money = 0;
//遍历集合
for (Integer key : map2.keySet()) {
//键是价格,值是数量
money += key * map2.get(key);
}
//把价格回调回去
if (onMoneyClick != null) {
onMoneyClick.getData(money);
}
}
//checkBox接口回调
public interface OncheckClick {
void setBoolean(boolean check);
}
public OncheckClick oncheckClick;
public void setOncheckClick(OncheckClick oncheckClick) {
this.oncheckClick = oncheckClick;
}
//价格的接口回调
public interface OnMoneyClick {
void getData(Integer money);
}
public OnMoneyClick onMoneyClick;
public void setOnMoneyClick(OnMoneyClick onMoneyClick) {
this.onMoneyClick = onMoneyClick;
}
}