仿淘宝购物车嵌套ListView
2015-06-16 17:11
465 查看
最近做到了淘宝的购物车功能,对于中间的店铺商品的显示也废了翻脑筋,原本打算用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
be70
();
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
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- Delphi7中Listview的常用功能汇总
- Delphi控件ListView的属性及使用方法详解
- android中ListView数据刷新时的同步方法
- Android提高之ListView实现自适应表格的方法
- Android中实现水平滑动(横向滑动)ListView示例
- C# listview添加combobox到单元格的实现代码
- ListView Adapter优化 实例
- Android用ListView显示SDCard文件列表的小例子
- Adapter实现ListView带多选框等状态的自定义控件的注意事项
- asp.net ListView 数据绑定
- Android之ScrollView嵌套ListView和GridView冲突的解决方法
- android ListView和ProgressBar(进度条控件)的使用方法
- Repeater与ListView功能概述及使用介绍
- android ListView和GridView拖拽移位实现代码
- ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定数据
- Android实现为ListView同时设置点击时的背景和点击松手之后的背景
- Android ListView的item背景色设置和item点击无响应的解决方法
- android开发中ListView与Adapter使用要点介绍
- Android ListView数据绑定显示的三种解决方法