我正在尝试使用ArrayList动态填充ExpandableListView,用于视图组和ArrayList>对于项目视图。我设法通过带有虚拟数据的固定String数组来实现它的工作方式,但是因为我将一直处理这些对象作为ArrayLists,所以我想保持这样。我得到一个IndexOutOfBoundsException:索引1无效,目前大小为1。我一直试图让它工作一段时间,我做了很多搜索,并没有真正找到任何适用于我想做的事情以及如何做到的信息。请任何人帮助我看看我做错了什么。提前谢谢。
这是代码,我保留了固定的字符串数组,以显示我想要的ArrayLists和注释掉的字符串数组代码:
public class ConfigAdapter extends BaseExpandableListAdapter
{
private Activity activity;
public String []groupList = {"Group1", "Group2", "Group3", "Group4",
"Group5", "Group6", "Group7"}; // String array for parent list text views
public String [][]childList = {
{
"Child1", "Child2", "Child3", "Child4"
},
{
"Child1", "Child2"
},
{
"Child1", "Child2"
},
{
"Child1", "Child2", "Child3"
},
{
"Child1", "Child2", "Child3"
},
{
"Child1"
},
{
"Child1", "Child2", "Child3"
}
}; // String array for child list text views
public String[][] dataObjectList = {
{
"1", "2", "3", "4"
},
{
"2348", "2442"
},
{
"1", "2"
},
{
"1", "2", "3"
},
{
"24234", "23432", "6567"
},
{
"1"
},
{
"1", "2", "3"
}
};
private ArrayList<String> groupStrings;
private ArrayList<ArrayList<String>> itemStrings;
private ArrayList<ArrayList<String>> dataObjectStrings;
public ConfigAdapter()
{
assert "Default constructor not used." != null; // Assert to prompt not to use this constructor.
}
public ConfigAdapter(Activity refActivity)
{
activity = refActivity;
groupStrings = new ArrayList<String>();
itemStrings = new ArrayList<ArrayList<String>>();
dataObjectStrings = new ArrayList<ArrayList<String>>();
}
public void setGroupStrings(ArrayList<String> refGroupStrings)
{
groupStrings = refGroupStrings;
}
public void setItemStrings(ArrayList<String> refItemStrings)
{
itemStrings.add(refItemStrings);
}
public void setDataObjectStrings(ArrayList<String> refDataObjectStrings)
{
dataObjectStrings.add(refDataObjectStrings);
}
public ArrayList<String> getGroupStrings()
{
return groupStrings;
}
public ArrayList<ArrayList<String>> getItemStrings()
{
return itemStrings;
}
public ArrayList<ArrayList<String>> getDataObjectStrings()
{
return dataObjectStrings;
}
@Override
public Object getChild(int groupPosition, int childPosition)
{
return null;
}
@Override
public long getChildId(int groupPosition, int childPosition)
{
return 0;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
{
LayoutInflater childLayoutInflater = (LayoutInflater) activity.getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View childView = childLayoutInflater.inflate(R.layout.config_child_list_view, null);
TextView itemTextView = (TextView) childView.findViewById(R.id.configListTextView1);
itemTextView.setText(itemStrings.get(groupPosition).get(childPosition));
//itemTextView.setText(childList[groupPosition][childPosition]);
final ViewSwitcher childViewSwitcher = (ViewSwitcher) childView.findViewById(R.id.configListViewSwitcher);
final TextView dataObjectTextView = (TextView) childViewSwitcher.findViewById(R.id.configListTextView2);
dataObjectTextView.setText(dataObjectStrings.get(groupPosition).get(childPosition));
//dataObjectTextView.setText(dataObjectList[groupPosition][childPosition]);
System.out.println("Group position: " + groupPosition);
System.out.println("Child position: " + childPosition);
System.out.println("Data object list: " + dataObjectList.length);
final EditText dataObjectEditText = (EditText) childViewSwitcher.findViewById(R.id.configEditText1);
dataObjectEditText.setHint("hello");
childViewSwitcher.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(childViewSwitcher.getCurrentView() == dataObjectTextView)
{
childViewSwitcher.showNext();
}
}
});
{
}
return childView;
}
@Override
public int getChildrenCount(int groupPosition)
{
return childList[groupPosition].length;
}
@Override
public Object getGroup(int groupPosition)
{
return groupPosition;
}
@Override
public int getGroupCount()
{
return groupList.length;
}
@Override
public long getGroupId(int groupPosition)
{
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
TextView tvParent = new TextView(activity);
tvParent.setText(groupStrings.get(groupPosition));
//tvParent.setText(groupList[groupPosition];
tvParent.setPadding(10, 20, 10, 20);
tvParent.setTextSize(18);
tvParent.setTypeface(null, Typeface.BOLD); // Sets text to bold
return tvParent;
}
@Override
public boolean hasStableIds()
{
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition)
{
return true;
}
}