0
我在每一行都有一個帶有EditText的RecyclerView。每個EditText都有一個附加到它的TextWatcher和一個數組中的對象,用於存儲有關該行和EditText的值的信息。EditText的onTextChanged在行回收中使用空值調用
我面臨的問題是,當行離開屏幕時,它會被回收,但在那個過程中,onTextChanged被調用一個空字符串,這意味着一個空字符串被保存到行的信息對象。當該行再次加載時,它只是加載一個空白值,從而有效地刪除EditText之前的任何內容。這似乎是非常無用的功能,因爲(據我所知),無法區分清除回收和用戶實際清除EditText中的值,使得RecyclerView中的EditTexts完全無用。
我onBindViewHolder
方法是這樣的:
@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);
}
我TextWatcher是:打擊,這將是簡單地檢查,如果文本爲空或沒有做任何事情之前
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) {}
}
這不是一個選擇因爲用戶可以輸入的合法值是空白值。 – JamEngulfer