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) {} 

} 

回答

0

好方法之一與它,也許這樣的事情(原諒我可憐的格式):

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

if (!charSequence.equals("")) { 

    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; 
    } 
} 

} 
+0

這不是一個選擇因爲用戶可以輸入的合法值是空白值。 – JamEngulfer

相關問題