2014-04-08 16 views
5

Kullanıcı her yeni karakter yazdığında bir EditText alan içeriğini düzenlemek istiyorum. Temel olarak libphonenumber kullanarak bir telefon numarasını biçimlendirmek istiyorum.Biçimlendirme EditText telefon numarası kullanıcı türleri olarak

Alan içeriğini okuyan ve telefon biçiminde biçimlendiren bir TextWatcher uyguladım. Ama her zaman EditText metnini biçimlendirilmiş dizeyle ayarladığımda, izleyici tekrar çağrılır, metni bir kez daha ayarlar ve bu sonsuz döngüde kalır.

Metni kullanıcı türleri olarak düzenlemenin en iyi veya uygun yolu nedir?

@Override 
public void afterTextChanged(Editable editable) { 
    if (editable.length() > 1) { 
     try { 
      PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); 
      PhoneNumber numberProto = phoneUtil.parse(editable.toString(), "BR"); 
      String formatted = phoneUtil.format(numberProto, PhoneNumberFormat.NATIONAL); 
      telephone.setText(formatted); 
     } catch (NumberParseException e) { 
      Log.d("Telefone", "NumberParseException was thrown: " + e.toString()); 
     } 
    } 
} 

cevap

4

TextWatcher içinde setText yönteminin çağrılmasına dikkat etmeniz gerekir. Aksi halde sonsuz bir döngü yaratırsınız, çünkü her zaman metni değiştirirsiniz.

Sen gerçekten gerekliise bir yalnızca metin ayarlamak şunu deneyebilirsiniz:

if(!telephone.getText().toString().equals(formatted)) { 
    telephone.setText(formatted); 
} 

yerine sadece: Bir oluşturmaktan kaçınmak gerekir

telephone.setText(formatted); 

Bu şekilde sonsuz döngü

+0

Başka bir soru sorabilir miyim, metni değiştirdiğimde, imleç metin alanının başına gider. Sonunda nasıl kalmasını sağlayabilirim? – Guilherme

+2

İmleç konumlandırmasıyla ilgili bu yanıtı deneyin: http://stackoverflow.com/a/8035171/2399024 – donfuxx