0

각 행에 EditText가있는 RecyclerView가 있습니다. 각 EditText에는 행에 대한 정보와 EditText 값을 저장하기 위해 TextWatcher가 첨부 된 객체와 배열의 객체가 있습니다.EditText의 onTextChanged가 행에서 빈 값으로 호출 됨 recycle

내가 겪고있는 문제는 행이 화면을 벗어날 때 재활용되지만, 그 과정에서 onTextChanged는 빈 문자열로 호출되어 빈 문자열이 행의 정보 객체에 저장된다는 의미입니다. 해당 행이 다시로드되면 공백 값이로드되어 이전에 EditText에 있던 내용이 모두 삭제됩니다. 이것은 아주 쓸모없는 기능처럼 보입니다. (내가 알 수있는 한) 사용자는 Recycle Clear를 구분할 방법이 없기 때문에 EditText의 값을 지우고 RecyclerView의 EditTexts를 완전히 쓸모 없게 만듭니다. 텍스트가 없습니다 아무것도하기 전에 빈 경우, 또는 단순히 확인하는 것이에 대처하기 위해

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 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이 있습니다 :

onBindViewHolder 방법은 이것이다 그걸로, 아마도 이런 식으로 (내 가난한 형식을 용서) :

@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