2011-07-18 2 views
6

그래서 안드로이드 용 TextWatcher를 구현하고 TextChangedListener를 여러 번 호출하거나 무한 루프로 들어가는 몇 가지 문제가 발생했습니다. EditText 위젯을 통화 형식의 문자열로 변환하십시오. 나는이 문제를 해결하기 위해 무슨 짓을TextChangedListener 제거 후 다시 추가

가 afterTextChanged 이벤트에 다음 내 자신의 사용자 정의 TextWatcher를 만들고 있었다했던

public class CurrencyTextWatcher implements TextWatcher { 
    private EditText et; 

    public CurrencyTextWatcher(EditText editText) { 
     et = editText; 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

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

    public void afterTextChanged(Editable s) { 
     et.removeTextChangedListener(this); 
     et.setText(myCurrencyString); 
     et.addTextChangedListener(this); 
    } 
}

그래서 제 질문은,이 일을 더 나은 방법이되어 다음

같은? 하나의 EditText 위젯을 사용하여 편집 내용과 그 결과 형식화 된 문자열을 보관하고 싶습니다.

또한 실제로 TextChangedListener를 제거한 다음 추가하는 것과 관련된 다른 문제가 있습니까? 사전에

감사

답변

3

당신이 당신의 EDITTEXT는 afterTextChanged 호출 할 것이다, 그래서 당신의 setText에게 당신이 afterTextChanged에있는 경우에만 호출 할 때마다 호출 자제해야한다고 생각 (텍스트 및 전화 등으로) 업데이트됩니다 매번 뭔가가 정말로 바뀌고 있습니다. 에 대해 다음과 같은 방법이

if (!myCurrencyString.equals(et.getText())) 
{ 
    et.setText(myCurrencyString); 
} 
+0

아, 완벽한 .. 나는이 생각하지 않았다 믿을 수 없다. 고맙습니다 – Jason

0

같은

STH.

private void resetAddTagField() { 
    if (edtView != null && textWatcherListener != null) { 
     edtView.removeTextChangedListener(textWatcherListener); 
     edtView.setText(DEFAULT_TEXT);  

     edtView.addTextChangedListener(textWatcherListener); 
    } 
} 

배우고 무엇 : TextWatcher의 힘을 과소 평가하지 말라 : D : D