2015-10-20 27 views
11

Giriş formu oluştururken bir sorun buldum. Kullanıcı bir şeyi doğru bir şekilde doldurduğunda, TextInputLayout'ta bazı hatalar gösterip bunları devre dışı bırakıyorum.TextInputLayout setErrorEnabled, yeni TextView nesnesi oluşturmuyor

error example

Ben

mTextInputLayout.setError("This field is required"); 

ile ayarlayın ve

mTextInputLayout.setError(null); 

Problem ile devre dışı hala hata mesajı gösteriyordu boş TextView'un nesnesinin altlıkları olmasıdır . Bu yüzden ve nasıl çalıştığını ve iyi görünüyor

mTextInputLayout.setErrorEnabled(false); 

ayarı ile tamamen hatayı devre dışı bırakmak için çalıştı, ANCAK ben tekrar belirleyemezsiniz.

mTextInputLayout.setErrorEnabled(true); 
mTextInputLayout.setError("This field is required"); 

ararken yine sadece salt çizgi DEĞİL hata mesajı bakın, nedenle hata mesajı gösteriyordu TextView'un tahrip ve yeniden oluşturulmamış görünüyor.

setErrorEnabled(false) çağrıldığında TextView nesnelerinin yok edildiği ve yeniden oluşturulmadığı anlaşılan here okudum. Hata mı, özellik mi?

The source for this control is not yet available in AOSP so I used the decompiler built in to Android Studio to examine the code to understand what was going wrong. I found that setErrorEnabled() actually creates and destroys a TextView object, whereas I was expecting it to simply toggle the visibility.

cevap

9

Birisi aynı sorunla karşılaşırsa, iyi çalışan bir geçici çözüm buldum. Sadece hata TextView nesnesinin görünürlüğünü ayarlayın ve kapatın, nesneyi yok etmeyin.

kullanın bu hata mesajını etkinleştirme: setErrorEnabled, (belki de daha erken ve) Destek kütüphane sürümü 23.1.1 itibariyle

textInputLayout.setError(null); 

if (textInputLayout.getChildCount() == 2) 
    textInputLayout.getChildAt(1).setVisibility(View.GONE); 
+1

Teşekkürler, aynı sorunla karşı karşıya kalıyordum. Google neden böyle uygulandığını bilmiyorum, ancak bu setErrorEnabled (true) amaçlanan gibi çalışmıyorsa korkunç -> setErrorEnabled (true) den sonra setErrorEnabled (true) den sonra – Ragaisis

+0

numaralı telefona dönüp java'ya bakıyorum. lang.NoClassDefFoundError: Başarısız çözüm: Landroid/support/v7/internal/widget/TintManager; , android.support.design.widget.TextInputLayout.setError (TextInputLayout.java: 379) at textInputLayout.setError (null); –

+0

Android destek kütüphanesini projenize (build.gradle dosyanızda) alıyorsunuz? bağımlılıkları da kullanıyorsanız, {comb = com.android.support:design:23.1.0 ' } – dabo

0

arayarak: hata mesajı devre dışı bırakılması için

if (textInputLayout.getChildCount() == 2) 
    textInputLayout.getChildAt(1).setVisibility(View.VISIBLE); 

textInputLayout.setError("This field is required"); 

ve bu (false), TextView hatasını kaldırır ve ardından setError (String) çağrıldığında TextInputLayout'un yeni bir hata göstermesine neden olur. Ancak, hata iletisi temizlendikten sonra ek dolguların Düzen'den kaldırılmadığı hâlâ mevcut bir hata var. Bu hata yukarıdaki @ Dabo yayınını kullanarak çalışılan:

https://code.google.com/p/android/issues/detail?id=200137