最近做到了淘宝的购物车功能,对于中间的店铺商品的显示也废了翻脑筋,原本打算用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