我在ViewPager
內有Fragment
。EditText .setError()不適用重新創建我的自定義錯誤圖標
在該片段,我有幾個EditText
其OnTextChanged聽衆(在onViewCreated
方法加入)做一些驗證工作,並調用一個函數來設置/刪除錯誤,例如:
// Sets or removes an error message in the nameField EditText
public void validateUsername(String message)
{
if(message == null)
{
nameField.setError(null);
}
else
{
nameField.setError(message,errorIcon);
}
}
的errorIcon是Drawable
實例化onCreate
這樣的:
errorIcon = getResources().getDrawable(R.drawable.ic_wrong_input);
errorIcon.setBounds(new Rect(0, 0, errorIcon.getIntrinsicWidth(), errorIcon.getIntrinsicHeight()));
當我鍵入的EditText的東西,確認工作正常:顯示我的錯誤信息,用我的自定義圖標。
但是,當我旋轉裝置,該validateUsername()
函數被調用(預期的行爲),在else
分支nameField.setError(message,errorIcon)
得到執行,但EditText
得到Android的默認錯誤圖標,而不是我的(是的,在調試時,我可以看到,我的errorIcon Drawable是instanciated)。之後,如果我在EditText
中輸入了無效的內容,則再次調用驗證方法,這次我再次獲得自定義錯誤圖標。如果我再次旋轉設備,同樣的事情:重新創建默認圖標,我輸入的東西無效後的自定義圖標...
任何人都可以解釋這種行爲?爲什麼我會在設備旋轉造成重新創建後獲取Android的默認錯誤圖標,即使我明確設置了自定義錯誤圖標?
編輯:
我試着在我validateUsername()
方法instanciating的繪製對象,但沒有奏效。
編輯2:
我想,這樣它融合了我的用戶界面也更好地使用自定義錯誤圖標是因爲我使用的是另一個自定義圖標(綠色的),顯示了作爲EditText
s'的右邊Drawable
當他們的輸入是有效的,我希望他們是一致彼此。
現在我已經辭職了,我讓Android使用默認錯誤圖標(即,我沒有在setError()
方法中指定任何Drawable
)。當輸入有效時,我將EditText的右邊的Drawable設置爲我自定義的「input is valid」圖標,爲了一致性,我修改了它的大小與Android的indicator_input_error.png相同。
但是,我不喜歡這種方法(例如在將來的版本中,indicator_input_error.png圖標可能會不同),我無法理解爲什麼當Fragment
被重新創建時我仍然得到默認圖標。奇怪的是,第一次Fragment
被重新創建,如果EditText驗證失敗,並且validateUsername()被非空消息調用,我得到我的自定義圖標。第二次(等等)Fragment
被重新創建,我得到了Android的默認圖標。如果我輸入了一些無效的文本,我再次得到我的自定義圖標,這非常奇怪。
你可以嘗試的另一件事是調用nameField – Lovis
上的'requestFocus'不行,那也行不通。 – user1987392