2017-05-01 1 views
0

Also basierend darauf, ob die Eingabe des Benutzers über 6 im EditText der ListView ist, möchte ich eine CheckBox in derselben Zeile der ListView hinzufügen. Es wird jedoch immer in die erste Zeile eingefügt. Ich denke, dass dies etwas Einfaches sein soll, aber ich kann es nicht herausfinden, nachdem ich andere Beiträge gesucht habe.onTextChanged, generiert CheckBox wird zur selben Zeile in ListView hinzugefügt

Eine andere Frage. Ist es am besten, die Daten von jedem Element in der ListView in einer ArrayList zu speichern? oder gibt es noch etwas anderes, um die Werte von allen TextView/Spinner/CheckBox zu bekommen?

 @Override 
     public View getView(int i, View view, ViewGroup viewGroup) { 

      final ComboView comboView; 
      if(view == null){ 
       comboView = new ComboView(); 
       LayoutInflater layoutInflater = InputCombos.this.getLayoutInflater(); 
       view = layoutInflater.inflate(R.layout.input_combos_view, null); 
       comboView.combo = (TextView) view.findViewById(R.id.combo); 
       comboView.numOrbs = (TextView) view.findViewById(R.id.numOrbs); 
       comboView.comboEdit = (EditText) view.findViewById(R.id.comboEdit); 
       comboView.comboElement = (Spinner) view.findViewById(R.id.comboElement); 

       ArrayAdapter<String> comboElements = new ArrayAdapter<>(InputCombos.this, android.R.layout.simple_spinner_item, elements); 
       comboElements.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       comboView.comboElement.setAdapter(comboElements); 

       comboView.pos = i; 

       comboView.comboEdit.addTextChangedListener(new TextWatcher() { 
        @Override 
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

        } 

        @Override 
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
         if(charSequence.length() != 0){ 
          int orbCount = Integer.parseInt((charSequence).toString()); 
          if(orbCount >= 6){ 
           LinearLayout comboViewLayout = (LinearLayout) findViewById(R.id.comboViewLayout); 
           comboView.row = new CheckBox(InputCombos.this); 
           //CheckBox row = new CheckBox(InputCombos.this); 
           comboView.row.setText("Row"); 
           comboViewLayout.addView(comboView.row); 
          } 
          comboData.set(comboView.pos,orbCount); 
          System.out.println(comboData); 
         } 
        } 

        @Override 
        public void afterTextChanged(Editable editable) { 

        } 
       }); 

       view.setTag(comboView); 
      } else { 
       comboView = (ComboView) view.getTag(); 
      } 

      System.out.println(combosNum); 
      comboView.combo.setText(combosNum.get(i)); 

      return view; 
     } 

Antwort

0

Wenn ein Layout-ID mehrfach gefunden (wie es der Fall ist, wenn Sie mehrere Zeilen mit demselben Layout), Android wird das erste Vorkommen zurückkehren, dass es finden können: 1. Zeile

LinearLayout comboViewLayout = (LinearLayout) findViewById(R.id.comboViewLayout); 

Stattdessen sollten Sie nur in der aktuellen Zeile danach suchen

LinearLayout comboViewLayout = (LinearLayout) view.findViewById(R.id.comboViewLayout); 
+0

Ah ich habe in der tat aber, dass, um vielleicht versuchen, aber es wird gesagt, etwas über die Sicht endgültig zu sein Einstellung war nicht sicher, ob das eines war gute Sache oder nicht. Ich hätte es zuerst versuchen sollen ... Danke. –

+0

Das Setzen einer Variablen auf final ist normalerweise keine schlechte Idee. In Ihrem Fall müssen Sie wahrscheinlich eine neue endgültige Variable einführen, der Sie den Wert der Ansicht zuweisen. Die Ansicht selbst kann in Ihrem Fall nicht auf final gesetzt werden. – SimonSays

Verwandte Themen