仿淘宝购物车嵌套ListView

  

最近做到了淘宝的购物车功能,对于中间的店铺商品的显示也废了翻脑筋,原本打算用ExpandableListView来做,发现又特别的麻烦,干脆就直接写个嵌套的ListView,废话不多说,直接上代码


主页

public class MainActivity extends Activity {

private ListView parentlv;//父级listview
private List<Parent> data = new ArrayList<Parent>();
private ParentAdapter padapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
parentlv = (ListView) findViewById(R.id.panrt_lv);
List<Child> clist = new ArrayList<Child>();
Child c;
for (int i = 0; i < 3; i++) {
c = new Child();
c.setId(i);
c.setTitle("商品"+i);
c.setPrice(2.3+i);
c.setNum(i+5);
clist.add(c);
}
Parent p;
for (int i = 0; i < 7; i++) {
p = new Parent();
p.setId(i);
p.setTitle("题目"+i);
p.setChilddata(clist);
data.add(p);
}
padapter = new ParentAdapter(getApplicationContext(), data);
parentlv.setAdapter(padapter);
}


两个实体类

package com.example.listandlistdemo;


import java.util.List;


public class Parent {

private int id;
private String title;
private List<Child> childdata;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public List<Child> getChilddata() {
return childdata;
}
public void setChilddata(List<Child> childdata) {
this.childdata = childdata;
}


}



package com.example.listandlistdemo;


public class Child {


private int id;
private String title;
private double price;
private int num;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}


}


加载的adapter

package com.example.listandlistdemo;


import java.util.List;


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;


public class ParentAdapter extends BaseAdapter {


private List<Parent> data;
private Context context;
private LayoutInflater lif;
private ChildAdapter cadapter;

public ParentAdapter(Context context,List<Parent> data) {
this.context = context;
this.data = data;
lif = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}


@SuppressWarnings("null")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
holder = new ViewHolder();
convertView = lif.inflate(R.layout.parent_adapter_layout, null);
holder.tvtitle = (TextView) convertView.findViewById(R.id.parent_tvtitle);
holder.childlv = (NoScrollListView) convertView.findViewById(R.id.child_lv);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
cadapter = new ChildAdapter(context, data.get(position).getChilddata());
holder.tvtitle.setText(data.get(position).getTitle());
holder.childlv.setAdapter(cadapter);
return convertView;
}
class ViewHolder{
TextView tvtitle;
NoScrollListView childlv;
}

}


子级的adapter

package com.example.listandlistdemo;


import java.util.List;


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


public class ChildAdapter extends BaseAdapter {


private List<Child> data;
private Context context;
private LayoutInflater lif;

public ChildAdapter(Context context,List<Child> data) {
this.context = context;
this.data =data;
lif = LayoutInflater.from(context);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
holder = new ViewHolder();
convertView = lif.inflate(R.layout.child_adapter_layout, null);
holder.tvtitle = (TextView) convertView.findViewById(R.id.child_tvtitle);
holder.tvprice = (TextView) convertView.findViewById(R.id.child_tvprice);
holder.tvnum = (TextView) convertView.findViewById(R.id.child_tvnum);
holder.imgadd = (ImageView) convertView.findViewById(R.id.child_imgadd);
holder.imgunadd = (ImageView) convertView.findViewById(R.id.child_imgunadd);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}

holder.tvtitle.setText(data.get(position).getTitle());
holder.tvprice.setText(data.get(position).getPrice()+"");
holder.tvnum.setText(data.get(position).getNum()+"");
// holder.imgadd.setOnClickListener(l)
return convertView;
}

class ViewHolder{
TextView tvtitle;
TextView tvprice;
TextView tvnum;
ImageView imgadd;
ImageView imgunadd;
}

}


ListView嵌套不能滑动的问题,这里是直接重写的

package com.example.listandlistdemo;


import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;


public class NoScrollListView extends ListView {


public NoScrollListView(Context context) {
super(context);
}


public NoScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}


public NoScrollListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}


@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}


}


项目demo下载地址

http://download.csdn.net/detail/qq_16654471/8812849

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值