Ich habe eine RecyclerView mit einem EditText in jeder Zeile. Jedem EditText ist ein TextWatcher und ein Objekt in einem Array zum Speichern von Informationen über die Zeile und den Wert von EditText zugeordnet. Das Problem, dem ich gegenüberstehe, ist, dass wenn die Zeile außerhalb des Bildschirms verschwindet, sie recycelt wird, aber in diesem Prozess wird onTextChanged mit einer leeren Zeichenfolge aufgerufen, was bedeutet, dass eine leere Zeichenfolge im Informationsobjekt der Zeile gespeichert wird. Wenn diese Zeile erneut geladen wird, wird nur ein leerer Wert geladen, wodurch der Inhalt gelöscht wird, der zuvor im EditText enthalten war. Dies scheint eine sehr nutzlose Funktion zu sein, denn (soweit ich das beurteilen kann) gibt es keine Möglichkeit, zwischen einem Recycling-Löschen und dem Löschen des Wertes im EditText zu unterscheiden, wodurch EditTexts in einem RecyclerView völlig nutzlos werden. dieseEditText onTextChanged mit leerem Wert auf Zeilenwiederverwendung aufgerufen werden
meine onBindViewHolder
Methode ist:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
int value = indicators.get(position).getValue();
System.out.println("VALUE: " + indicator.getValue());
if (value == -1) {
viewHolder.inputBox.setText("");
} else {
viewHolder.inputBox.setText(Integer.toString(value));
}
viewHolder.editListener.updatePosition(position);
}
Mein TextWatcher ist dies:
private class EditBoxListener implements TextWatcher {
private int position;
private CharSequence sequence;
private boolean initialCall = true;
public void updatePosition(int _position) {
position = _position;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
System.out.println("TEXT CHANGED TO: " + charSequence.toString());
if (!initialCall) {
int value = -1;
try {
value = Integer.parseInt(charSequence.toString());
} catch (Exception e) {}
if (indicators.size() > 0) {
indicators.get(position).setValue(value);
}
} else {
initialCall = false;
}
}
@Override
public void afterTextChanged(Editable editable) {}
}
Das ist kein opt ion, weil ein berechtigter Wert, den der Benutzer eingeben kann, ein leerer Wert ist. – JamEngulfer