childView是4个textView组成,GroupView就是一个textView。
本身是3个组,当刷新变成4个组时,出现数组越界
这行代码:info = map11.get(key).get(childPosition);
现在不知道怎么解决数组越界问题,listview的数组越界可以用list.clear()方法,
这个ExpandableListView是第一次用,知道的帮忙下,谢谢了。急用
部分代码如下:
// 设置子item的组件
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
String key = TblbActivity.this.parent1.get(groupPosition);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) TblbActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.elv_child_item, null);
}
Gwzjclzt info = new Gwzjclzt();
info = map11.get(key).get(childPosition);
TextView tv_tb_jcbh = (TextView) convertView
.findViewById(R.id.tv_tb_jcbh);
TextView tv_tb_hphm = (TextView) convertView
.findViewById(R.id.tv_tb_hphm);
TextView tv_tb_hpzl = (TextView) convertView
.findViewById(R.id.tv_tb_hpzl);
TextView tv_tb_jclx = (TextView) convertView
.findViewById(R.id.tv_tb_jclx);
tv_tb_jcbh.setText(info.getJcbh());
tv_tb_hphm.setText(info.getHphm());
tv_tb_hpzl.setText(info.getHpzl());
tv_tb_jclx.setText(info.getJclx());
return convertView;
}
* 刷新ExpandableListView
*/
protected void refreshView() {
for (int z = 0; z < mGwlb_list.size(); z++) {
List<Gwzjclzt> mGwzjclzt1_list = new ArrayList<Gwzjclzt>();
String test5 = mGwlb_list.get(z).getGwmc() + "在检车辆";
parent1.add(test5);
for (int z1 = 0; z1 < mGwzjclzt_list.size(); z1++) {
if ((mGwzjclzt_list.get(z1).getGzzt()).equals(parent1.get(z))) {
mGwzjclzt1_list.add(mGwzjclzt_list.get(z1));
map.put(parent1.get(z), mGwzjclzt1_list);
}
}
// 告诉主线程一个消息错误类型:网络连接失败,内容:"网络连接失败"
Message msg = new Message();
// 消息的代号,是一个int类型
msg.what = UPDATE_UI_TIR;
// 要传递的消息对象
msg.obj = z;
// 利用handler发送消息
mHandler.sendMessage(msg);
}
}
private List<String> parent1 = null;
private Gwzjclzt mGwzjclzt1 = null;
private Map<String, List<Gwzjclzt>> map = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tbcls);
mContext = this;
init();
tbclAdapter = new MyAdapter(getApplicationContext(), parent1, map);
tbcls_list.setAdapter(tbclAdapter);
你先要搞清楚到底是key越界了还是childPosition越界了,不过感觉你的代码阅读性有点差,建议你将ExpandableListView的每一组数据封装一下,比如:
class ELItem{
public String itemName;
public List<String> childContents;
}
然后ExpandableListView的数据可以用List来表示,由于List是有序的,对它增减数据都很方便。
封装以后,ExpandableListView空数据时报空指针,因为我的数据是从网络中拿到的,我是在获取数据以后再次刷新的,开始的时候我传了空给ExpandableListView,父item拿数目时报空指针
//获取父item的个数
@Override
public int getGroupCount() {
return mElvItem.getItemName().length();
}
```public class ElvAdapter extends BaseExpandableListAdapter {
private Context context;
private ElvItem mElvItem;
public ElvAdapter(Context context, ElvItem mElvItem) {
this.context = context;
this.mElvItem = mElvItem;
}
```public class ElvItem {
public String itemName;
public List<Gwzjclzt> childContents;
public ElvItem(String itemName, List<Gwzjclzt> childContents) {
super();
this.itemName = itemName;
this.childContents = childContents;
}
话说这是什么鬼
//获取父item的个数
@Override
public int getGroupCount() {
return mElvItem.getItemName().length();
}
Adapter里面的数据不应该用 List《ElvItem 》来表示吗,比如
List《ElvItem 》 groups;
GroupCount就是他是groups.size(),每个childCount就是groups.get(groupPosition).getChildContents().size()