2016-04-26 12 views
2

Ich habe Probleme beim Abrufen von Text aus EditText im ListView-Adapter. Wenn ich zum Beispiel auf "9" klicke, bekomme ich 9 nicht. Stattdessen bekomme ich immer 3. Ich bin nicht in der Lage, den Grund dafür herauszufinden. Bitte informieren Sie mich, wo ich falsch liege.So erhalten Sie Text in EditText mit ListView und Adapter

Dies ist mein Code für Ihre Kenntnisnahme. Vielen Dank im Voraus!

class Planet { 
    String name; 
    int distance; 
    String quantità; 
    boolean selected = false; 

     public Planet(String name, int distance, String quantità) { 
     super(); 
     this.name = name; 
     this.distance = distance; 
     this.quantità = quantità; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 

    } 

    public int getDistance() { 
     return distance; 
    } 

    public void setDistance(int distance) { 
     this.distance = distance; 
    } 

    public boolean isSelected() { 
     return selected; 
    } 

    public void setSelected(boolean selected) { 
     this.selected = selected; 
    } 

    public String getQuantità() { 
     return quantità; 
    } 

    public void setQuantità(String quantità) { 
     this.quantità = quantità; 
    } 
    } 

    public class PlanetAdapter extends ArrayAdapter<Planet>{ 
    private List<Planet> planetList; 
    private Context context; 
    ArrayList<Planet> objects; 


    public PlanetAdapter(List<Planet> planetList, Context context) { 
     super(context, R.layout.single_listview_item, planetList); 
     this.planetList = planetList; 
     this.context = context; 
    } 

    public static class PlanetHolder { 
     public TextView planetName; 
     public TextView distView; 
     public CheckBox chkBox; 
     public EditText edit; 
     public String quantità="3"; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View v = convertView; 

     final PlanetHolder holder = new PlanetHolder(); 

     if(convertView == null) { 

      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.single_listview_item, null); 

      holder.planetName = (TextView) v.findViewById(R.id.name); 
      holder.distView = (TextView) v.findViewById(R.id.dist); 
      holder.chkBox = (CheckBox) v.findViewById(R.id.chk_box); 
      holder.edit = (EditText) v.findViewById(R.id.editText); 


      holder.edit.setVisibility(View.GONE); 
      holder.edit.setEnabled(false); 



      holder.chkBox.setOnCheckedChangeListener((MainActivity) context); 

      // 
      holder.chkBox.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        if (holder.chkBox.isChecked()) { 

         holder.edit.setVisibility(View.VISIBLE); 
         holder.edit.setEnabled(true); 



         holder.edit.addTextChangedListener(new TextWatcher() { 
          @Override 
          public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
          } 

          @Override 
          public void onTextChanged(CharSequence s, int start, int before, int count) { 
           holder.quantità = holder.edit.getText().toString(); 

           System.out.println("leggo questo dalla edittext:"+ holder.edit.getText().toString()); 


          } 

          @Override 
          public void afterTextChanged(Editable s) { 

          } 
         }); 


        } else { 
         holder.edit.setVisibility(View.GONE); 
         holder.edit.setEnabled(false); 
         holder.edit.setText(null); 

        } 
       } 

      }); 


      } else { 

     } 


     Planet p = planetList.get(position); 

     p.setQuantità(holder.quantità); 



     holder.planetName.setText(p.getName()); 
     holder.distView.setText("" + p.getDistance()); 
     holder.chkBox.setChecked(p.isSelected()); 
     holder.chkBox.setTag(p); 
     holder.edit.setEnabled(false); 


     return v; 
    } 


    ArrayList<Planet> getBox() { 
     ArrayList<Planet> box = new ArrayList<Planet>(); 
     for (Planet p : planetList) { 
      if (p.selected) 
       box.add(p); 
     } 
     return box; 
    } 

    } 
+0

Anteil Code der Klasse und Adapter. –

+1

Bitte aktualisieren Sie Ihren Code durch Bearbeiten Sie Ihre Frage, fügen Sie nicht in Antwort –

+0

Ich habe diesen Fehler: "Es sieht aus wie Ihr Beitrag ist vor allem Code. Bitte fügen Sie weitere Details". Warum? –

Antwort

0

Ersetzen Sie Ihre getView() -Methode mit diesem:

View row = convertView; 
PlanetHolder holder = null; 
if (row == null) { 
    LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
    row = inflater.inflate(R.layout.single_listview_item, parent, false); 
    holder = new PlanetHolder(); 
    holder.planetName = (TextView) row.findViewById(R.id.name); 
    holder.distView = (TextView) row.findViewById(R.id.dist); 
    holder.chkBox = (CheckBox) row.findViewById(R.id.chk_box); 
    holder.edit = (EditText) row.findViewById(R.id.editText); 
    row.setTag(holder); 
} else { 
    holder = (PlanetHolder) row.getTag(); 
} 
final Planet p = planetList.get(position); 

holder.chkBox.setOnCheckedChangeListener((MainActivity) context); 
holder.chkBox.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (holder.chkBox.isChecked()) { 
      holder.edit.setVisibility(View.VISIBLE); 
      holder.edit.setEnabled(true); 
      holder.edit.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       } 

       @Override 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 
       } 

       @Override 
       public void afterTextChanged(Editable s) { 
        p.setQuantità(holder.edit.getText().toString().trim()); 
       } 
      }); 
     } else { 
      holder.edit.setVisibility(View.GONE); 
      holder.edit.setEnabled(false); 
      holder.edit.setText(null); 
     } 
    } 
}); 
holder.planetName.setText(p.getName()); 
holder.distView.setText("" + p.getDistance()); 
holder.chkBox.setChecked(p.isSelected()); 
holder.chkBox.setTag(p); 
holder.edit.setEnabled(false); 

return row; 
+0

akzeptiere die Antwort und stimme hoch :) danke –

0

Sie können Text Ihrer Listview auf diese Weise erhalten, Verwenden Sie dies in Ihrer Aktivität oder Fragment. Hier ist Artikel ein Arraylist.

for (int i = 0; i < items.size(); i++) { 

      View wantedView = recyclerView.getChildAt(i); 
      EditText editqty = (EditText) wantedView.findViewById(R.id.edtTxtQty); 
      if ((editqty.getText().toString().length() > 0)) { 
       //store edit text value in any arraylist or array by editqty.getText().toString() 
      } 
     } 
0

Sie haben fix Wert von PlanetHolder Klasse, so dass Sie immer Wert bekommen '3'

public static class PlanetHolder { 
    public TextView planetName; 
    public TextView distView; 
    public CheckBox chkBox; 
    public EditText edit; 
    public String quantità="3"; 
} 

public String quantità fix Wert entfernen.

und Zweite ist, dass Sie View v = convertView; haben erklären aber, wenn Bedingung Sie dies überprüfen können if(convertView == null) { so ersetzen convertView-v

Verwandte Themen