2016-11-11 3 views
0

Ich erstelle eine vertikale Liste von Textviews mit einer Arraylist und an onclicklistener zu jedem. Im Onclick setze ich Code, um diesen Gegenstand zu entfernen. Wenn ich nacheinander vom letzten zum ersten klicke, funktioniert das gut. Aber wenn ich die erste und dann die letzte entferne, gibt es mir eine Nullzeiger-Ausnahme. Ich weiß, dass dies geschieht, weil es versucht, einen Index zu entfernen, der nicht mehr vorhanden ist, oder zumindest ist es das, was ich denke. Aber ich kann nicht herausfinden, wie ich das lösen kann.Entfernen Sie Elemente aus Array mit automatisch generierten 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:

dachte ich ein kleines Update, aber es es Probleme hat. Anstatt die Elemente aus den Arrays mit dem Index zu entfernen, kann ich sie entfernen, indem ich nach dem Text in der Textansicht suche.

Das Problem mit dieser Lösung ist, dass, wenn mein Array enthält 2 Elemente, die identisch sind, dann kann es den falschen Index entfernen.

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

Gelöst:

I löste es, indem zunächst für den Index der Frage Textsuche und diesen Index von beiden Arrays zu entfernen. Die Arrays sind benutzergeneriert und ich möchte verhindern, dass der Benutzer die gleiche Frage zweimal eingibt.

Auch ich habe es so gemacht, weil ich immer noch ein Amateur bin und nicht von der Recyclerview bewusst war. Ich habe vor, mich selbst auf diese Funktion vorzubereiten und sie hoffentlich umzusetzen.

+0

Sie möchten einen ArrayAdapter. Nicht was auch immer du hier gemacht hast –

Antwort

-1

Sie sollten in Betracht ziehen, RecyclerView zu verwenden.

0

Ich habe wirklich keine Ahnung, warum Sie das tun möchten? Wenn Sie nur Textansicht in einer Liste entfernen möchten, warum verwenden Sie nicht stattdessen Listview oder Recyclerview?

Verwandte Themen