您的位置:首页 > 其它

仿淘宝购物车嵌套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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  listview lietview优化