//全局控件上写,解决焦点冲突
android:descendantFocusability=“blocksDescendants”
//自定义加加减减
public class AddSub extends LinearLayout {
private View mView;
private TextView add,num,sub;
private OnNumListener mOnNumListener;
public void setOnNumListener(OnNumListener onNumListener) {
mOnNumListener = onNumListener;
}
public AddSub(Context context) {
this(context,null);
}
public AddSub(Context context, AttributeSet attrs) {
this(context, attrs,-1);
}
public AddSub(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
initListener();
getCount();
}
private void initListener() {
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
jia();
}
});
sub.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
jian();
}
});
}
public void initView(Context context){
mView = View.inflate(context, R.layout.zdy, this);
sub = mView.findViewById(R.id.subtext);
num = mView.findViewById(R.id.numtext);
add = mView.findViewById(R.id.addtext);
num.setText("1");
}
public interface OnNumListener{
void onNumChange(View view,int curNum);
}
public void jia(){
String s = num.getText().toString();
int anInt = Integer.parseInt(s);
anInt++;
setCurrentCount(anInt);
}
public void jian(){
String s = num.getText().toString();
int anInt = Integer.parseInt(s);
if(anInt>1){
anInt--;
setCurrentCount(anInt);
}else{
Toast.makeText(getContext(),"111",Toast.LENGTH_SHORT).show();
}
}
public void setCurrentCount(int number){
num.setText(number+"");
if(mOnNumListener!=null){
mOnNumListener.onNumChange(this,number);
}
}
public int getCount(){
return Integer.parseInt(num.getText().toString());
}
}
//1.网络请求 单例模式 GET请求
public class OkHttp {
private static final String MEDIO_GET = “GET”;
private static OkHttpClient client;
//单例模式
private OkHttp(){}
//创建对象
public static void init(){
client = new OkHttpClient.Builder()
.connectTimeout(3000,TimeUnit.MILLISECONDS)
.readTimeout(3000,TimeUnit.MILLISECONDS)
.writeTimeout(3000,TimeUnit.MILLISECONDS)
.build();
}
public static Request creat(String url, String method){
Request.Builder builder = new Request.Builder().url(url);
Request request = null;
switch (method){
case MEDIO_GET:
request = builder.build();
break;
}
return request;
}
public static void enqueueGet(String url, Callback callback){
Request request = creat(url, MEDIO_GET);
Call call = client.newCall(request);
call.enqueue(callback);
}
}
//2.单例模式初始化
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
OkHttp.init();
}
}
//3.model层
public class OneModel {
public void one(String url, final HttpCallBack httpCallBack) {
OkHttp.enqueueGet(url, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String s = response.body().string();
mHandler.post(new Runnable() {
@Override
public void run() {
httpCallBack.getData(s);
}
});
}
});
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
public interface HttpCallBack {
void getData(String name);
}
}
//4.view层
public interface OneView {
void onSuccess(String result);
void onFailer(String msg);
}
//5.presenter层
public class OnePresenter {
private OneView mOneView;
private OneModel mOneModel;
public OnePresenter(OneView oneView) {
mOneView = oneView;
mOneModel = new OneModel();
}
public void onePresenter(String url) {
mOneModel.one(url, new OneModel.HttpCallBack() {
@Override
public void getData(String name) {
if (name != null) {
mOneView.onSuccess(name);
} else {
mOneView.onFailer("失败");
}
}
});
}
}
//6.activity
public class MainActivity extends AppCompatActivity implements OneView {
private OnePresenter mOnePresenter;
private ExpandableListView exlistview;
private List<User.DataBean> list;
private OneAdapter oneAdapter;
private CheckBox all;
private TextView hj;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
exlistview = findViewById(R.id.exlistview);
all = findViewById(R.id.all);
hj = findViewById(R.id.hj);
exlistview.setGroupIndicator(null);
mOnePresenter = new OnePresenter(this);
mOnePresenter.onePresenter(UrlUtil.PATH);
all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
setCheckAll(1);
getTotal();
}else{
setCheckAll(0);
getTotal();
}
}
});
}
public void getTotal(){
double total = 0;
int groupCount = oneAdapter.getGroupCount();
for(int i =0;i<groupCount;i++){
User.DataBean group = (User.DataBean) oneAdapter.getGroup(i);
List<User.DataBean.ListBean> list = group.getList();
for (int j = 0;j<list.size();j++){
User.DataBean.ListBean bean = list.get(j);
boolean checked = bean.isChecked();
if(checked){
double price = bean.getPrice();
total+=price*bean.getNum();
}
}
}
hj.setText("合计:"+total);
}
public void setCheckAll(int s){
int groupCount = oneAdapter.getGroupCount();
for(int i = 0;i<groupCount;i++){
User.DataBean item = (User.DataBean) oneAdapter.getGroup(i);
List<User.DataBean.ListBean> itemList = item.getList();
for (int j = 0;j<itemList.size();j++){
User.DataBean.ListBean listBean = itemList.get(j);
listBean.setSelected(s);
}
}
oneAdapter.notifyDataSetChanged();
}
@Override
public void onSuccess(String result) {
Gson gson = new Gson();
User user = gson.fromJson(result, User.class);
list = user.getData();
oneAdapter = new OneAdapter(getApplicationContext(), list);
exlistview.setAdapter(oneAdapter);
for (int i = 0; i< oneAdapter.getGroupCount(); i++){
exlistview.expandGroup(i);
}
initShopCartChange();
}
@Override
public void onFailer(String msg) {
}
private void initShopCartChange(){
exlistview.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
User.DataBean group = (User.DataBean) oneAdapter.getGroup(groupPosition);
group.setChecked(!group.isChecked());
int c = 0;
if(group.isChecked()){
c=1;
}
List<User.DataBean.ListBean> list = group.getList();
for (int i =0;i<list.size();i++){
User.DataBean.ListBean bean = list.get(i);
bean.setSelected(c);
}
getTotal();
oneAdapter.notifyDataSetChanged();
return true;
}
});
exlistview.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
User.DataBean.ListBean child = (User.DataBean.ListBean) oneAdapter.getChild(groupPosition,childPosition);
boolean checked = child.isChecked();
if(checked){
child.setSelected(0);
}else{
child.setSelected(1);
}
getTotal();
oneAdapter.notifyDataSetChanged();
return true;
}
});
}
}
//7.接口数据存储
public interface UrlUtil {
public String PATH = “http://www.zhaoapi.cn/product/getCarts?uid=71”;
}
//8.适配器
public class OneAdapter extends BaseExpandableListAdapter {
private Context mContext;
private List<User.DataBean> list;
private AddSub.OnNumListener mOnNumListener;
public void setOnNumListener(AddSub.OnNumListener onNumListener) {
mOnNumListener = onNumListener;
}
public OneAdapter(Context context, List<User.DataBean> list) {
mContext = context;
this.list = list;
}
@Override
public int getGroupCount() {
return list.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return list.get(groupPosition).getList().size();
}
@Override
public Object getGroup(int groupPosition) {
return list.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return list.get(groupPosition).getList().get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder groupViewHolder = null;
if(convertView == null){
convertView = View.inflate(mContext, R.layout.group,null);
groupViewHolder = new GroupViewHolder();
groupViewHolder.group_box = convertView.findViewById(R.id.group_box);
groupViewHolder.group_text = convertView.findViewById(R.id.group_text);
convertView.setTag(groupViewHolder);
}else{
groupViewHolder = (GroupViewHolder) convertView.getTag();
}
groupViewHolder.group_box.setChecked(list.get(groupPosition).isChecked());
groupViewHolder.group_text.setText(list.get(groupPosition).getSellerName());
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder childViewHolder = null;
if(convertView == null){
convertView = View.inflate(mContext,R.layout.child,null);
childViewHolder = new ChildViewHolder();
childViewHolder.child_box = convertView.findViewById(R.id.child_box);
childViewHolder.child_image = convertView.findViewById(R.id.child_image);
childViewHolder.child_text1 = convertView.findViewById(R.id.child_text);
childViewHolder.child_text2 = convertView.findViewById(R.id.child_text1);
childViewHolder.mAddSub = convertView.findViewById(R.id.child_addsub);
convertView.setTag(childViewHolder);
}else{
childViewHolder = (ChildViewHolder) convertView.getTag();
}
final User.DataBean.ListBean bean = this.list.get(groupPosition).getList().get(childPosition);
bean.setChecked(false);
childViewHolder.child_box.setChecked(bean.isChecked());
childViewHolder.child_text1.setText(bean.getTitle());
childViewHolder.child_text2.setText(""+bean.getPrice());
String images = list.get(groupPosition).getList().get(0).getImages();
String[] split = images.split("!");
Picasso.with(mContext).load(split[0]).into(childViewHolder.child_image);
childViewHolder.mAddSub.setOnNumListener(new AddSub.OnNumListener() {
@Override
public void onNumChange(View view, int curNum) {
bean.setPrice(curNum);
if(mOnNumListener!=null){
mOnNumListener.onNumChange(view,curNum);
}
}
});
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
class GroupViewHolder{
CheckBox group_box;
TextView group_text;
}
class ChildViewHolder{
CheckBox child_box;
ImageView child_image;
TextView child_text1;
TextView child_text2;
AddSub mAddSub;
}
}
//bean类
public class User {
private String msg;
private String code;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
private String sellerName;
private String sellerid;
private boolean isChecked;
private List<ListBean> list;
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
public String getSellerName() {
return sellerName;
}
public void setSellerName(String sellerName) {
this.sellerName = sellerName;
}
public String getSellerid() {
return sellerid;
}
public void setSellerid(String sellerid) {
this.sellerid = sellerid;
}
public List<ListBean> getList() {
return list;
}
public void setList(List<ListBean> list) {
this.list = list;
}
public static class ListBean {
private double bargainPrice;
private String createtime;
private String detailUrl;
private String images;
private int num;
private int pid;
private double price;
private double pscid;
private int selected;
private int sellerid;
private String subhead;
private String title;
private boolean isChecked;
public boolean isChecked() {
return selected!=0;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
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 getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getPscid() {
return pscid;
}
public void setPscid(double pscid) {
this.pscid = pscid;
}
public int getSelected() {
return selected;
}
public void setSelected(int selected) {
this.selected = selected;
}
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;
}
}
}
}