Android实现购物车整体页面逻辑详解
本文为大家讲解了Android实现购物车的整体页面逻辑,供大家参考,具体内容如下
MainActivity.java
publicclassMainActivityextendsAppCompatActivityimplementsView.OnClickListener{
Stringurl="http://www.zhaoapi.cn/product/getCarts";
privateExpandableListViewel_cart;
privateCheckBoxcb_cart_all_select;
privateTextViewtv_cart_total_price;
privateButtonbtn_cart_pay;
MyAdapteradapter;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
privatevoidinitData(){
HashMapmap=newHashMap<>();
map.put("uid","71");
OkhtttpUtils.getInstance().doPost(url,map,newOkhtttpUtils.OkCallback(){
@Override
publicvoidonFailure(Exceptione){
}
@Override
publicvoidonResponse(Stringjson){
CartInfocartInfo=newGson().fromJson(json,CartInfo.class);
if("0".equals(cartInfo.getCode())){
Listdata=cartInfo.getData();
adapter=newMyAdapter(data);
el_cart.setAdapter(adapter);
//展开二级列表
for(intx=0;x
MyAdapter.java
publicclassMyAdapterextendsBaseExpandableListAdapter{
privateListlist;
publicMyAdapter(Listdata){
list=data;
}
@Override
publicintgetGroupCount(){
returnlist==null?0:list.size();
}
@Override
publicintgetChildrenCount(inti){
returnlist.get(i).getList()==null?0:list.get(i).getList().size();
}
@Override
publicViewgetGroupView(finalinti,booleanb,Viewview,ViewGroupviewGroup){
//先拿到Bean里组的数据,看hiJson
CartInfo.DataBeandataBean=list.get(i);
ParentViewHolderparentViewHolder;
if(view==null){
view=View.inflate(viewGroup.getContext(),R.layout.item_cart_parent,null);
parentViewHolder=newParentViewHolder(view);
view.setTag(parentViewHolder);
}else{
parentViewHolder=(ParentViewHolder)view.getTag();
}
parentViewHolder.seller_name_tv.setText(dataBean.getSellerName());
booleancurrentSellerAllProductSelected=isCurrentSellerAllProductSelected(i);
parentViewHolder.seller_cb.setChecked(currentSellerAllProductSelected);
//D.设置点击CheckBox
parentViewHolder.seller_cb.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(mOnCartListChangeListener!=null){
mOnCartListChangeListener.onSellerCheckedChange(i);
}
}
});
returnview;
}
@Override
publicViewgetChildView(finalinti,finalinti1,booleanb,Viewview,ViewGroupviewGroup){
CartInfo.DataBeandataBean=list.get(i);
Listlist1=dataBean.getList();
CartInfo.DataBean.ListBeanlistBean=list1.get(i1);
ChildViewHolderchildViewHolder;
if(view==null){
view=View.inflate(viewGroup.getContext(),R.layout.item_cart_child,null);
childViewHolder=newChildViewHolder(view);
view.setTag(childViewHolder);
}else{
childViewHolder=(ChildViewHolder)view.getTag();
}
//设置商品名字
childViewHolder.product_title_name_tv.setText(listBean.getTitle());
//设置商品单价
childViewHolder.product_price_tv.setText(listBean.getPrice()+"");
//设置复选框是否选中
childViewHolder.child_cb.setChecked(listBean.getSelected()==1);
//设置组合式自定义控件内部的数量
childViewHolder.add_remove_view.setNumber(listBean.getNum());
//D.设置商品CheckBox的点击事件,通过接口回调,暴露给外面
childViewHolder.child_cb.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(mOnCartListChangeListener!=null){
mOnCartListChangeListener.onProductCheckedChange(i,i1);
}
}
});
//D.设置商品数量的点击事件,通过接口回调,暴露给外面
childViewHolder.add_remove_view.setOnNumberChangeListener(newAddSubView.OnNumberChangeListener(){
@Override
publicvoidonNumberChange(intnum){
if(mOnCartListChangeListener!=null){
mOnCartListChangeListener.onProducNumberChange(i,i1,num);
}
}
});
returnview;
}
publicbooleanisCurrentSellerAllProductSelected(inti){//根据商品改变商家--如果商品全部选中商家则选中--有一个商品没选中则商家不选中
CartInfo.DataBeandataBean=list.get(i);
Listbeans=dataBean.getList();
for(CartInfo.DataBean.ListBeanbean:beans){
if(bean.getSelected()==0){
returnfalse;
}
}
returntrue;
}
publicbooleanisAllProductsSelected(){//根据商品改变全选--如果商品全部选中全选则选中--有一个商品没选中则全选不选中
for(intx=0;xlist1=dataBean.getList();
for(intj=0;jlist1=dataBean.getList();
for(intj=0;jlist=dataBean.getList();
for(intj=0;jbeans=dataBean.getList();
for(intj=0;jlist=dataBean.getList();
CartInfo.DataBean.ListBeanlistBean=list.get(i1);
listBean.setSelected(listBean.getSelected()==0?1:0);
}
//C.设置所有商品的状态
publicvoidchangeAllProductStatus(booleanselected){
for(intx=0;xlist=dataBean.getList();
for(intj=0;jlist=dataBean.getList();
CartInfo.DataBean.ListBeanlistBean=list.get(i1);
listBean.setNum(number);
}
publicinterfaceonCartListChangeListener{
/**
*当商家的checkBox点击时回调
*/
voidonSellerCheckedChange(inti);
/**
*当点击子条目商品的CheckBox回调
*/
voidonProductCheckedChange(inti,inti1);
/**
*当点击加减按钮的回调
*/
voidonProducNumberChange(inti,inti1,intnumber);
}
//D.
onCartListChangeListenermOnCartListChangeListener;
//D.
publicvoidsetOnCartListChangeListener(onCartListChangeListeneronCartListChangeListener){
mOnCartListChangeListener=onCartListChangeListener;
}
publicstaticclassParentViewHolder{
publicCheckBoxseller_cb;
publicTextViewseller_name_tv;
publicParentViewHolder(ViewrootView){
this.seller_cb=(CheckBox)rootView.findViewById(R.id.seller_cb);
this.seller_name_tv=(TextView)rootView.findViewById(R.id.seller_name_tv);
}
}
publicstaticclassChildViewHolder{
publicCheckBoxchild_cb;
publicImageViewproduct_icon_iv;
publicTextViewproduct_title_name_tv;
publicTextViewproduct_price_tv;
publicAddSubViewadd_remove_view;
publicChildViewHolder(ViewrootView){
this.child_cb=(CheckBox)rootView.findViewById(R.id.child_cb);
this.product_icon_iv=(ImageView)rootView.findViewById(R.id.product_icon_iv);
this.product_title_name_tv=(TextView)rootView.findViewById(R.id.product_title_name_tv);
this.product_price_tv=(TextView)rootView.findViewById(R.id.product_price_tv);
this.add_remove_view=(AddSubView)rootView.findViewById(R.id.add_remove_view);
}
}
@Override
publicObjectgetGroup(inti){
returnnull;
}
@Override
publicObjectgetChild(inti,inti1){
returnnull;
}
@Override
publiclonggetGroupId(inti){
return0;
}
@Override
publiclonggetChildId(inti,inti1){
return0;
}
@Override
publicbooleanhasStableIds(){
returnfalse;
}
@Override
publicbooleanisChildSelectable(inti,inti1){
returnfalse;
}
}
activity_main.xml
AddSubView.java
publicclassAddSubViewextendsLinearLayoutimplementsView.OnClickListener{//组合式控件
privateintnumber=1;
privateTextViewsub_tv;
privateTextViewproduct_number_tv;
privateTextViewadd_tv;
publicAddSubView(Contextcontext){
this(context,null);
}
publicAddSubView(Contextcontext,@NullableAttributeSetattrs){
this(context,attrs,0);
}
publicAddSubView(Contextcontext,@NullableAttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
Viewview=inflate(context,R.layout.add_remove,this);
sub_tv=view.findViewById(R.id.sub_tv);
product_number_tv=view.findViewById(R.id.product_number_tv);
add_tv=view.findViewById(R.id.add_tv);
sub_tv.setOnClickListener(this);
add_tv.setOnClickListener(this);
}
@Override
publicvoidonClick(Viewview){
switch(view.getId()){
caseR.id.sub_tv:
if(number>1){
--number;
product_number_tv.setText(number+"");
if(onNumberChangeListener!=null){
onNumberChangeListener.onNumberChange(number);
}
}else{
Toast.makeText(getContext(),"不能再少了",Toast.LENGTH_SHORT).show();
}
break;
caseR.id.add_tv:
if(number<8){
++number;
product_number_tv.setText(number+"");
if(onNumberChangeListener!=null){
onNumberChangeListener.onNumberChange(number);
}
}else{
Toast.makeText(getContext(),"不能再多了",Toast.LENGTH_SHORT).show();
}
break;
}
}
publicintgetNumber(){
returnnumber;
}
publicvoidsetNumber(intnumber){
this.number=number;
product_number_tv.setText(number+"");
}
OnNumberChangeListeneronNumberChangeListener;
publicvoidsetOnNumberChangeListener(OnNumberChangeListeneronNumberChangeListener){
this.onNumberChangeListener=onNumberChangeListener;
}
interfaceOnNumberChangeListener{
voidonNumberChange(intnum);
}
}
add_remove.xml
item_cart_parent.xml
item_cart_child.xml
OkHttpUtils.java
publicclassOkhtttpUtils{
privatestaticOkhtttpUtilsmOkhtttpUtils;
privateOkHttpClientmOkHttpClien;
privatefinalHandlermHandler;
privateOkhtttpUtils(){
//创建一个主线程的handler
mHandler=newHandler(Looper.getMainLooper());
mOkHttpClien=newOkHttpClient.Builder()
.connectTimeout(5000,TimeUnit.MILLISECONDS)
.readTimeout(5000,TimeUnit.MILLISECONDS)
.writeTimeout(5000,TimeUnit.MILLISECONDS)
.build();
}
//单例模式
publicstaticOkhtttpUtilsgetInstance(){
if(mOkhtttpUtils==null){
synchronized(OkhtttpUtils.class){
if(mOkhtttpUtils==null){
returnmOkhtttpUtils=newOkhtttpUtils();
}
}
}
returnmOkhtttpUtils;
}
publicinterfaceOkCallback{
voidonFailure(Exceptione);
voidonResponse(Stringjson);
}
publicvoiddoPost(Stringurl,Mapmap,finalOkCallbackokCallback){
//创建FormBody的对象,把表单添加到formBody中
FormBody.Builderbuilder=newFormBody.Builder();
if(map!=null){
for(Stringkey:map.keySet()){
builder.add(key,map.get(key));
}
}
FormBodyformBody=builder.build();
//创建Request对象
Requestrequest=newRequest.Builder()
.post(formBody)
.url(url)
.build();
//创建Call对象
finalCallcall=mOkHttpClien.newCall(request);
call.enqueue(newCallback(){
@Override
publicvoidonFailure(Callcall,finalIOExceptione){
if(okCallback!=null){
//切换到主线程
mHandler.post(newRunnable(){
@Override
publicvoidrun(){
okCallback.onFailure(e);
}
});
}
}
@Override
publicvoidonResponse(Callcall,finalResponseresponse)throwsIOException{
try{
if(response!=null&&response.isSuccessful()){
finalStringjson=response.body().string();
mHandler.post(newRunnable(){
@Override
publicvoidrun(){
if(okCallback!=null){
okCallback.onResponse(json);
return;
}
}
});
}
}catch(IOExceptione){
e.printStackTrace();
}
if(okCallback!=null){
okCallback.onFailure(newException("网络异常"));
}
}
});
}
//封装doGet的网络请求
publicvoiddoGet(Stringurl,finalOkCallbackokCallback){
Requestrequest=newRequest.Builder()
.get()
.url(url)
.build();
finalCallcall=mOkHttpClien.newCall(request);
call.enqueue(newCallback(){
@Override
publicvoidonFailure(Callcall,finalIOExceptione){
if(okCallback!=null){
//切换到主线程
mHandler.post(newRunnable(){
@Override
publicvoidrun(){
okCallback.onFailure(e);
}
});
}
}
@Override
publicvoidonResponse(Callcall,finalResponseresponse)throwsIOException{
try{
if(response!=null&&response.isSuccessful()){
finalStringjson=response.body().string();
mHandler.post(newRunnable(){
@Override
publicvoidrun(){
if(okCallback!=null){
okCallback.onResponse(json);
return;
}
}
});
}
}catch(IOExceptione){
e.printStackTrace();
}
}
});
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。