2016-11-11 31 views
0

私はarraylistでtextviewsの垂直リストを作成し、それぞれにonclicklistenerでアタッチします。 onclickでは、その項目を削除するコードを設定しました。最後に生成されたものから順にクリックすると、正常に動作します。しかし、最初のものを削除してから最後のものを削除すると、nullポインタ例外が返されます。私は、これがもはや存在しないインデックスを削除しようとしているため、または少なくともそれが起こっていると考えているので、これが起こっていることを知っています。しかし、私はそれを解決する方法を理解することはできません。自動生成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]); 
    } 

はEDIT:

私は小さな修正を考え出したが、それはそれの問題を抱えています。インデックスを持つ配列から項目を削除する代わりに、テキストビュー内のテキストを検索して削除することができます。

この解決方法の問題点は、配列に2つの項目が含まれていて、それらが同じである場合、間違ったインデックスが削除される可能性があることです。解決

questionText = textView[Index].getText().toString(); 
answerText = textView[Index].getText().toString(); 
if(questionArray.contains(questionText) && questionArray.size() > 0){ 
    questionArray.remove(questionText); 
    answerArray.remove(answerText);     
} 

を私は最初の質問テキストのインデックスを検索すると両方の配列からそのインデックスを削除することによってそれを解決しました。配列はユーザ​​ー生成されているので、ユーザーが同じ質問を2回入力するのを防ぐ予定です。

questionText = textView[Index].getText().toString(); 
int questionIndex = questionArray.indexOf(questionText); 
questionArray.remove(questionIndex); 
answerArray.remove(questionIndex); 

また、私はまだアマチュアであり、Recyclerviewを認識していなかったので、私はこのようにしました。私はその機能について自分自身を教育し、うまく実装するつもりです。

+0

ArrayAdapterが必要です。ここで何をしても –

答えて

-1

RecyclerViewを使用することを検討する必要があります。

0

私は本当にあなたがこれをしたい理由については全く考えていませんか?あなたがlist内のtextviewを削除したいのであれば、代わりにlistviewやrecyclerviewを使わないのはなぜですか?

関連する問題