ExpandableListView

来源:互联网 发布:程序员刚入职很痛苦 编辑:程序博客网 时间:2024/09/21 08:52

今天为了一个ExpandableListView的使用可是煞费苦心啊。遇到了3个问题:

1、group的元素和child的元素关联问题。

group = new ArrayList<String>();
child = new ArrayList<List<DishesInfo>>();


addItem("主食", new DishesInfo[] {
new DishesInfo(0, "米饭", "2", R.drawable.mice, null, null),
new DishesInfo(1, "面", "5", R.drawable.noodle, null, null)


});
addItem("凉菜", new DishesInfo[] { new DishesInfo(0, "凉拌牛肉", "20",
R.drawable.cool1, null, null)


});
addItem("汤羹", new DishesInfo[] {
new DishesInfo(0, "鲍鱼汤", "880", R.drawable.soup2, null, null),
new DishesInfo(1, "西红柿汤", "12", R.drawable.soup3, null, null)


});
addItem("热菜", new DishesInfo[] {


});
addItem("餐具", new DishesInfo[] {
new DishesInfo(0, "碗", "4", R.drawable.tool1, null, null),
new DishesInfo(1, "筷子", "2", R.drawable.tool3, null, null),
new DishesInfo(2, "勺子", "2", R.drawable.tool2, null, null), });
addItem("饮品", new DishesInfo[] {
new DishesInfo(0, "可乐", " 5", R.drawable.drink1, null, null),
new DishesInfo(1, "雪碧", "5", R.drawable.drink2, null, null),
new DishesInfo(2, "奶茶", "10", R.drawable.drink3, null, null)


});



private void addItem(String str, DishesInfo[] dishes) {
// TODO Auto-generated method stub
group.add(str);
List<DishesInfo> item = new ArrayList<DishesInfo>();
for (int i = 0; i < dishes.length; i++) {
item.add(dishes[i]);
}
child.add(item);
}

一直在纠结怎么关联父、子之间的下标。参考了n多份大神的资料才稍微明白,父、子其实就是一组变量,可以用集合也可以用数组来存放。程序中使用的父子关系模型是

group---》child---》item---》dishes[i]


2、group和child元素在滑动刷新后产生错乱的问题。

public class MyExpandAdapter extends BaseExpandableListAdapter {


Context context;
LayoutInflater inflater;


List<String> group;
List<List<DishesInfo>> child = new ArrayList<List<DishesInfo>>();


public MyExpandAdapter(Context con, List<String> group,
List<List<DishesInfo>> child) {
context = con;
this.group = group;
this.child = child;
inflater = LayoutInflater.from(context);
}


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


@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return child.get(groupPosition).size();
}


@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return group.get(groupPosition);
}


@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return child.get(groupPosition).get(childPosition);
}


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


@Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
}


@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
TextView tv;
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// DishesInfo dishInfo = null;
// if (convertView == null) {

convertView = inflater.inflate(R.layout.group_item, null);
tv = (TextView) convertView.findViewById(R.id.group_tv);
// convertView.setTag(dishInfo);
// } else {
// dishInfo = (DishesInfo) convertView.getTag();
// }

tv.setText(group.get(groupPosition));
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {

convertView = inflater.inflate(R.layout.child_item, null);
tv = (TextView) convertView.findViewById(R.id.food);
tv.setText(child.get(groupPosition).get(childPosition).getName());
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}
}

问题原因:暂时还不清楚。

本来老师说红色部分是优化代码的部分,功能:此写法进行了适配器的优化,加载完的布局可以由之后操作调用而不用重新加载。但在这里却成了错误点,经过各种试验后最后把红色部分删掉才解决问题,浪费了不少时间。

3、点击子菜单点击事件不响应的问题。

解决方法:http://blog.csdn.net/iam_song/article/details/8622809

问题原因:http://blog.csdn.net/rev_fycd/article/details/9430157

0 0
原创粉丝点击