我正在使用一个ExpandableListView
小部件,它根据特定ArrayList
(称为q
)中的元素来扩展子视图。这工作正常。
问题是,在所有子视图下方,我想添加一个额外的视图。看起来这应该很简单:在适配器的getChildrenCount()
方法中,我添加1
了相关ArrayList
. 然后,在该getChildView()
方法中,我使用了具有 2 种情况的 switch(位置)语句:
- 一种默认情况,它为 ArrayList 中的每个对象扩展常规子视图
- 案例:-1,创建特殊视图(目前我只是使用 a
TextView
),放置在底部。
但是,我IndexOutOfBounds
在适配器上遇到错误,大概是因为我没有正确编码对getChildrenCount()
和/或getChildView()
方法的更改。我怀疑它正在寻找另一个数组元素(不存在),而不是将特殊视图膨胀为最后一个孩子。
这是适配器的getChildView()
和方法的代码。getChildrenCount()
如果您需要查看适配器的完整代码,请告诉我。
@Override
public View getChildView(int groupPos, int childPos, boolean arg2, View convertView,
ViewGroup arg4) {
if (convertView == null) {
switch (childPos) {
case -1:
TextView post = new TextView(null);
post.setText("post an answer");
post.setTextColor(Color.BLUE);
convertView = post;
break;
default:
convertView = getLayoutInflater().inflate(R.layout.answerbox, null);
}
TextView ansText = (TextView)convertView.findViewById(R.id.answerText);
TextView ansAuthor = (TextView)convertView.findViewById(R.id.answerAuthor);
TextView ansUV = (TextView)convertView.findViewById(R.id.answerUpvotes);
ansText.setText(q.get(groupPos).answers.get(childPos).text);
ansAuthor.setText(q.get(groupPos).answers.get(childPos).author);
ansUV.setText(Integer.toString(R.id.answerUpvotes));
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return q.get(groupPosition).answers.size() + 1;
}
在以下IndexOutOfBounds
行引发错误:
ansText.setText(q.get(groupPos).answers.get(childPos).text);
更新的代码(现在工作):
@Override
public View getChildView(int groupPos, int childPos, boolean arg2, View convertView,
ViewGroup arg4) {
if (convertView == null){
//switch (childPos){
if (childPos == q.get(groupPos).answers.size()){
convertView = getLayoutInflater().inflate(R.layout.answerbox, null);
TextView ansText = (TextView)convertView.findViewById(R.id.answerText);
TextView ansAuthor = (TextView)convertView.findViewById(R.id.answerAuthor);
TextView ansUV = (TextView)convertView.findViewById(R.id.answerUpvotes);
ansText.setText("POST NEW");
ansUV.setText(Integer.toString(R.id.answerUpvotes));
}
else{
convertView = getLayoutInflater().inflate(R.layout.answerbox, null);
TextView ansText = (TextView)convertView.findViewById(R.id.answerText);
TextView ansAuthor = (TextView)convertView.findViewById(R.id.answerAuthor);
TextView ansUV = (TextView)convertView.findViewById(R.id.answerUpvotes);
ansText.setText(q.get(groupPos).answers.get(childPos).text);
ansAuthor.setText("by " + q.get(groupPos).answers.get(childPos).author);
ansUV.setText(Integer.toString(R.id.answerUpvotes));
}
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return q.get(groupPosition).answers.size()+1;
}