我创建了一个带有arraylist的文本视图的垂直列表,并在onclicklistener上附加到每个文档视图。在onclick我设置代码删除该项目。当我从最后生成的顺序点击到第一个时,这工作正常。但是,如果我删除第一个,然后删除最后一个,它会给我一个空指针异常。我知道这种情况正在发生,因为它试图删除不再存在的索引,或者至少这是我认为正在发生的事情。但我无法弄清楚如何解决这个问题。
private void generateViews(){
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
final TextView[] textView = new TextView[questionArray.size()];
for(int i = 0; i < questionArray.size(); i++){
final int Index = i;
textView[Index] = new TextView(getActivity());
textView[Index].setText(questionArray.get(i));
textView[Index].setId(Index);
textView[Index].setGravity(Gravity.CENTER);
textView[Index].setPadding(15,15,15,15);
textView[Index].setLayoutParams(params);
textView[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (textView[Index].getId() == (v).getId()) {
questionArray.remove(Index);
answerArray.remove(Index);
saveVariables();
updateViews();
((ViewGroup) textView[Index].getParent()).removeView(textView[Index]);
Toast.makeText(getActivity(), "Question and Answer removed!", Toast.LENGTH_SHORT).show();
}
}
});
mainLayout.addView(textView[Index]);
}
编辑:
我想出了一个小修复,但它有问题。我没有使用索引从数组中删除项目,而是可以通过在textview中搜索文本来删除它们。
这个解决的问题是,如果我的数组包含2个相同的项,那么它可能会删除错误的索引。
questionText = textView[Index].getText().toString();
answerText = textView[Index].getText().toString();
if(questionArray.contains(questionText) && questionArray.size() > 0){
questionArray.remove(questionText);
answerArray.remove(answerText);
}
解决:
我通过首先搜索问题文本的索引并从两个数组中删除该索引来解决它。这些数组是用户生成的,我计划阻止用户两次输入相同的问题。
questionText = textView[Index].getText().toString();
int questionIndex = questionArray.indexOf(questionText);
questionArray.remove(questionIndex);
answerArray.remove(questionIndex);
另外,我是这样做的,因为我还是一个业余爱好者并且不知道Recyclerview。我计划自己教育这个功能,并希望能够实现它。
答案 0 :(得分:0)
我真的不知道你为什么要这样做?如果您只想删除列表中的textview,为什么不使用listview或recyclerview呢?
答案 1 :(得分:-1)
您应该考虑使用RecyclerView。