項目中寫到購物車就記錄一下,以後就可以直接拿來用了 方便很多,這裏用到的是ExpandableListView二級列表,可以展示商家和商品
1,
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ExpandableListView
android:id="@+id/expand"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ExpandableListView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:background="#e4919d">
<CheckBox
android:id="@+id/all_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="全選"/>
<TextView
android:id="@+id/all_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="價格:123"
android:layout_centerInParent="true"/>
<TextView
android:id="@+id/all_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:text="去結算(1)"/>
</RelativeLayout>
</RelativeLayout>
2,Activity_main
package com.example.lx;
ctivity extends AppCompatActivity implements iView {
@BindView(R.id.expand)
ExpandableListView expand;
@BindView(R.id.all_cb)
CheckBox allCb;
@BindView(R.id.all_price)
TextView allPrice;
@BindView(R.id.all_num)
TextView allNum;
private List<dataBean.DataBean> data = new ArrayList<>();
private ExpandAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
presenterimpl presenterimpl = new presenterimpl(this);
presenterimpl.setData(contance.data_url, dataBean.class);
allNum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
});
}
@Override
public void sucess(Object success) {
final dataBean dataBean = (com.example.lx.dataBean) success;
Log.d("MydataBean", dataBean + "");
Toast.makeText(this, "" + dataBean.getMessage(), Toast.LENGTH_SHORT).show();
data.addAll(dataBean.getData());
adapter = new ExpandAdapter(this, data);
expand.setAdapter(adapter);
expand.setGroupIndicator(null);
adapter.setAdapterCallback(new ExpandAdapter.adapterCallback() {
@Override
public void groupcheck(int groupPosition) {
boolean b = adapter.groupcheck(groupPosition);
adapter.groupchecked(groupPosition,!b);
Buttom();
adapter.notifyDataSetChanged();
}
@Override
public void childcheck(int groupPosition, int childPosition) {
boolean b = adapter.childcheck(groupPosition, childPosition);
adapter.childchecked(groupPosition,childPosition,!b);
Buttom();
adapter.notifyDataSetChanged();
}
@Override
public void setnum(int groupPosition,int childPosition, int num) {
adapter.setnumed(groupPosition,childPosition,num);
data.get(groupPosition).getSpus().get(childPosition).setPraise_num(num);
Buttom();
adapter.notifyDataSetChanged();
}
});
}
@Override
public void error(Object error) {
}
@OnClick(R.id.all_cb)
public void onViewClicked() {
boolean b = adapter.allcheck();
adapter.allchecked(!b);
Buttom();
adapter.notifyDataSetChanged();
}
private void Buttom(){
float v = adapter.all_price();
allPrice.setText("合計:"+v);
float v1 = adapter.all_num();
allNum.setText("去結算("+v1+")");
}
}
3,適配器
package com.example.lx;
blic class ExpandAdapter extends BaseExpandableListAdapter {
private Context context;
private List<dataBean.DataBean> data;
public ExpandAdapter(Context context, List<dataBean.DataBean> data) {
this.context = context;
this.data = data;
}
//
@Override
public int getGroupCount() {
return data.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return data.get(groupPosition).getSpus().size();
}
@Override
public Object getGroup(int groupPosition) {
return null;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewholder holder1=null;
if(convertView==null)
{
holder1 = new GroupViewholder();
convertView=View.inflate(context,R.layout.group_item,null);
holder1.group_cb = convertView.findViewById(R.id.group_cb);
holder1.group_name = convertView.findViewById(R.id.group_name);
convertView.setTag(holder1);
}
else
{
holder1 = (GroupViewholder) convertView.getTag();
}
holder1.group_name.setText(data.get(groupPosition).getName());
boolean groupcheck = groupcheck(groupPosition);
holder1.group_cb.setChecked(groupcheck);
holder1.group_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapterCallback.groupcheck(groupPosition);
}
});
return convertView;
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder holder2=null;
if(convertView==null)
{
holder2 = new ChildViewHolder();
convertView=View.inflate(context,R.layout.child_item,null);
holder2.child_cb = convertView.findViewById(R.id.child_cb);
holder2.child_img = convertView.findViewById(R.id.child_img);
holder2.child_name = convertView.findViewById(R.id.child_name);
holder2.child_price = convertView.findViewById(R.id.child_price);
holder2. jia = convertView.findViewById(R.id.jia);
holder2. jian = convertView.findViewById(R.id.jian);
holder2. num = convertView.findViewById(R.id.num);
convertView.setTag(holder2);
}
else
{
holder2 = (ChildViewHolder) convertView.getTag();
}
Glide.with(context).load(data.get(groupPosition).getSpus().get(childPosition).getPic_url()).into(holder2.child_img);
holder2.child_name.setText(data.get(groupPosition).getSpus().get(childPosition).getName());
holder2.child_price.setText(data.get(groupPosition).getSpus().get(childPosition).getSkus().get(0).getPrice()+"");
holder2.num.setText(data.get(groupPosition).getSpus().get(childPosition).getPraise_num()+"");
holder2.child_cb.setChecked(data.get(groupPosition).getSpus().get(childPosition).isChildChecked());
holder2.child_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapterCallback.childcheck(groupPosition,childPosition);
}
});
holder2.jia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int praise_num = data.get(groupPosition).getSpus().get(childPosition).getPraise_num();
praise_num++;
adapterCallback.setnum(groupPosition,childPosition,praise_num);
}
});
holder2.jian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int praise_num = data.get(groupPosition).getSpus().get(childPosition).getPraise_num();
praise_num--;
if(praise_num==0)
{
Toast.makeText(context, "商品不能再少了!", Toast.LENGTH_SHORT).show();
return;
}
adapterCallback.setnum(groupPosition,childPosition,praise_num);
}
});
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
class GroupViewholder{
private CheckBox group_cb;
private TextView group_name;
}
class ChildViewHolder{
private CheckBox child_cb;
private ImageView child_img;
private TextView child_name;
private TextView child_price;
private TextView jia;
private TextView jian;
private TextView num;
}
//全選反選
public boolean allcheck(){
for(int i=0;i<data.size();i++)
{
List<dataBean.DataBean.SpusBean> spus = data.get(i).getSpus();
for(int j=0;j<spus.size();j++)
{
if(!spus.get(j).isChildChecked())
{
return false;
}
}
}
return true;
}
public void allchecked(boolean b)
{
for(int i=0;i<data.size();i++)
{
List<dataBean.DataBean.SpusBean> spus = data.get(i).getSpus();
for(int j=0;j<spus.size();j++)
{
spus.get(j).setChildChecked(b);
}
}
}
//group的全選反選
public boolean groupcheck(int GroupPositon){
List<dataBean.DataBean.SpusBean> spus = data.get(GroupPositon).getSpus();
for(int j=0;j<spus.size();j++)
{
boolean b = spus.get(j).isChildChecked();
if(!b)
{
return false;
}
}
return true;
}
public void groupchecked(int GroupPositiopn,boolean b)
{
List<dataBean.DataBean.SpusBean> spus = data.get(GroupPositiopn).getSpus();
for(int j=0;j<spus.size();j++)
{
spus.get(j).setChildChecked(b);
}
}
//child的全選
public boolean childcheck(int GroupPositon,int ChildPosition){
dataBean.DataBean.SpusBean spusBean = data.get(GroupPositon).getSpus().get(ChildPosition);
if(spusBean.isChildChecked())
{
return true;
}
return false;
}
public void childchecked(int GroupPositiopn,int ChildPosition,boolean b)
{
dataBean.DataBean.SpusBean spusBean = data.get(GroupPositiopn).getSpus().get(ChildPosition);
spusBean.setChildChecked(b);
}
//給數量賦值
public void setnumed(int GroupPosition,int ChildPosition,int num)
{
dataBean.DataBean.SpusBean spusBean = data.get(GroupPosition).getSpus().get(ChildPosition);
spusBean.setPraise_num(num);
}
//計算價格
public float all_price(){
int allprice=0;
for(int i=0;i<data.size();i++)
{
List<dataBean.DataBean.SpusBean> spus = data.get(i).getSpus();
for(int j=0;j<spus.size();j++)
{
if(spus.get(j).isChildChecked()==true)
{
allprice+=spus.get(j).getPraise_num() * Float.parseFloat(spus.get(j).getSkus().get(0).getPrice());
}
}
}
return allprice;
}
//計算總數量
public float all_num(){
int allnum=0;
for(int i=0;i<data.size();i++)
{
List<dataBean.DataBean.SpusBean> spus = data.get(i).getSpus();
for(int j=0;j<spus.size();j++)
{
if(spus.get(j).isChildChecked()==true)
{
allnum+=spus.get(j).getPraise_num();
}
}
}
return allnum;
}
public interface adapterCallback{
void groupcheck(int groupPosition);
void childcheck(int groupPosition, int childPosition);
void setnum(int groupPosition,int childPosition,int num);
}
private adapterCallback adapterCallback;
public void setAdapterCallback(ExpandAdapter.adapterCallback adapterCallback) {
this.adapterCallback = adapterCallback;
}
}
4,父條目
<CheckBox
android:id="@+id/group_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"/>
<TextView
android:id="@+id/group_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="你居然開了個呢個"/>
5,子條目
<CheckBox
android:id="@+id/child_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
/>
<ImageView
android:id="@+id/child_img"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@mipmap/ic_launcher"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/child_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="繪本課改版特好玩顧客不提供"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:id="@+id/child_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="21313"
android:textColor="#f00"/>
<TextView
android:id="@+id/jian"
android:layout_width="15dp"
android:layout_height="wrap_content"
android:background="#ccc"
android:layout_marginLeft="70dp"
android:gravity="center"
android:text="-"/>
<TextView
android:id="@+id/num"
android:layout_width="20dp"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:gravity="center"
android:text="0"/>
<TextView
android:id="@+id/jia"
android:layout_width="15dp"
android:layout_height="wrap_content"
android:text="+"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginLeft="6dp"
android:background="#ccc"
/>
</LinearLayout>
</LinearLayout>