Java 删除元素后的Arraylist IndexOutOfBoundsException

Java 删除元素后的Arraylist IndexOutOfBoundsException,java,android,listview,arraylist,Java,Android,Listview,Arraylist,我知道这是一个愚蠢的问题,但我已经花了1,5个小时查看代码,没有发现任何东西: holder.removeQuestion .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Button b = (Button) v;

我知道这是一个愚蠢的问题,但我已经花了1,5个小时查看代码,没有发现任何东西:

holder.removeQuestion
                    .setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            // Button b = (Button) v;
                            // Question question = (Question) b.getTag();
                            Log.i("before removing", questionList.get(0)
                                    .getQuestion());
                            questionList.remove(0);
                            dataAdapter.notifyDataSetChanged();
                            Log.i("after removing", questionList.get(0)
                                    .getQuestion());
                        }
                    });
行:
questionList.remove(0)
是问题所在,但为什么?列表中充满了元素,我只想删除第一个元素,它怎么会被绑定?我在想,也许这会发生在我再次使用列表的代码中,也许我说的是我期望的比我实际给出的更大的arraylist

07-07 13:24:08.005: I/before removing(16695): Ako?
07-07 13:24:08.005: I/after removing(16695): Sa?
07-07 13:24:08.009: V/ConvertView(16695): 0
07-07 13:24:08.009: V/ConvertView(16695): 1
07-07 13:24:08.013: V/ConvertView(16695): 2
07-07 13:24:08.017: D/AndroidRuntime(16695): Shutting down VM
07-07 13:24:08.017: W/dalvikvm(16695): threadid=1: thread exiting with uncaught     
exception (group=0xa62b1288)
07-07 13:24:08.021: E/AndroidRuntime(16695): FATAL EXCEPTION: main
07-07 13:24:08.021: E/AndroidRuntime(16695): java.lang.IndexOutOfBoundsException:     
Invalid index 2, size is 2
07-07 13:24:08.021: E/AndroidRuntime(16695):    at     
java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
07-07 13:24:08.021: E/AndroidRuntime(16695):    at 
java.util.ArrayList.get(ArrayList.java:304)
07-07 13:24:08.021: E/AndroidRuntime(16695):    at 
com.example.discue.Discussion$MyCustomAdapter.getView
如果你还需要进一步的代码,我将添加注释。我不想给你太多的压力

编辑(onView方法):

@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
Log.v(“ConvertView”,String.valueOf(position));
if(convertView==null){
LayoutInflater vi=(LayoutInflater)
getSystemService(上下文布局\充气机\服务);
convertView=vi.充气(R.布局.问题列表,空);
holder=新的ViewHolder();
holder.question=(TextView)convertView
.findviewbyd(R.id.question);
holder.checkBox=(复选框)convertView
.findViewById(R.id.复选框1);
holder.likes=(TextView)convertView
.findViewById(R.id.numberOfLikes);
//创建用于删除问题的按钮(针对说话人)
holder.removeQuestion=(按钮)convertView
.findViewById(R.id.deleteQuestionBtn);
convertView.setTag(支架);
//在“删除问题”按钮上设置onclick侦听器
holder.remove问题
.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
//按钮b=(按钮)v;
//问题=(问题)b.getTag();
Log.i(“删除前”,questionList.get(0)
.getQuestion());
问题列表。删除(0);
dataAdapter.notifyDataSetChanged();
Log.i(“删除后”,questionList.get(0)
.getQuestion());
}
});
//设置问题的onclick listener on like复选框
holder.checkBox.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
复选框cb=(复选框)v;
问题=(问题)cb.getTag();
if(cb.isChecked()){
//更新“相似”按钮下的相似数
question.setLikes(question.getLikes()+1);
}否则{
question.setLikes(question.getLikes()-1);
}
//求助于问题列表
集合。排序(问题列表,
新比较器(){
公共整数比较(问题q1、问题q2){
返回(q2.getLikes()-q1.getLikes());
}
});
//执行更新
dataAdapter.notifyDataSetChanged();
问题.setSelected(cb.isChecked());
}
});
}否则{
holder=(ViewHolder)convertView.getTag();
}
问题=问题列表。获取(位置);
//显示/隐藏问题删除按钮(对于第一个问题)
if(question.isRemoveButtonVisible()){
holder.removeQuestion.setVisibility(View.VISIBLE);
}否则{
holder.removeQuestion.setVisibility(View.GONE);
}
//显示/隐藏问题类
if(question.isLikeButtonVisible()){
holder.checkBox.setVisibility(View.VISIBLE);
}否则{
holder.checkBox.setVisibility(View.GONE);
}
//像复选框一样设置选中/未选中和禁用/未禁用
//(除第一项质询外,其余全部)
if(question.isLikeDisabled()){
holder.checkBox.setChecked(true);
holder.checkBox.setEnabled(false);
}否则{
holder.checkBox.setChecked(question.isSelected());
holder.checkBox.setEnabled(true);
}
holder.question.setText(question.getQuestion());
holder.likes.setText(question.getLikes()+);
holder.checkBox.setTag(问题);
holder.removeQuestion.setTag(问题);
dataAdapter.notifyDataSetChanged();
返回视图;
}
此处发生错误:

Question question = questionList.get(position);

位置
2
,超出范围。您可能希望在该方法获取等于或大于
问题列表大小的
位置
值之前进行检查,或阻止该方法获取该值。您在U.I.的列表中的项目似乎比
问题列表中的问题多
在getView中给您的位置应该考虑数据的大小

我的猜测是,当您创建适配器时,您会给它一个特定的列表(问题列表),但在稍后的某个时候,您会在本地创建列表的新实例,并在不更新适配器的情况下对其进行修改


确保对列表所做的任何更改都在同一个列表实例上,并且没有创建新的列表实例。

您的错误出现在MyCustomAdapter.getView上,而不是questionList.remove上。请发布此方法实现。
java.lang.IndexOutOfBoundsException:索引2无效,大小为2
您正在某处访问2(通过变量或硬编码)。您发布的方法不是发生错误的代码。你能发布相关代码吗?非常清楚的错误消息:
java.lang.IndexOut
Question question = questionList.get(position);