2017-04-04 43 views
0

我有一組UI元素-TextView,EditText,甚至自定義視圖,它們都有setError(CharSequence error)方法。我正在寫一個簡單的實用程序類,可以幫助我調用setError(null),以便一次性設置它們。對於這一點,我寫了一個實用工具類,其中ValidationUtils相關可以初始化像...如何將Android視圖轉換爲具有特定方法的界面?

ValidationUtils validator = ValidationUtils.getInstance(); 
validator.put(etEmail); 
validator.put(etPassword); 

而在一般驗證的put發生在一個視圖對象。 Android View類似乎沒有setError(CharSequence錯誤),但是像EditText這樣的單獨UI類。我想要將所有條目存儲在Map中,然後調用validator.clearAll來遍歷此映射,並在每個類中調用setError以設置爲null。我已經寫等的接口:

public interface Validatable { 
    void setError(CharSequence errorMsg); 
} 

但不能完全弄清楚我如何與製作()通過認沽加元繼續轉型爲這個接口,這樣我可以稍後致電SETERROR。

眼下調用放給我java.lang.ClassCastException: android.support.v7.widget.AppCompatEditText cannot be cast to Validatable

回答

1

你將不能夠做到這一點,因爲沒有辦法爲你製造基地View類中實現你的接口。但是,你可以做什麼,是讓您的自定義View類實現該接口,然後像做:

if (view instanceof Validatable) { 
    Validatable.class.cast(view).setError(null); 
} else if (view instanceof TextView) { 
    TextView.class.cast(view).setError(null); 
} 

EditText延伸TextView,所以應該爲框架類涵蓋你的情況。

+0

你說得對。但我想我可能找到了解決辦法。庫「butterknife」似乎克服了這個問題,它使用JavaPoet在編譯期間生成代碼來擴展現有的活動類並實現所需的接口(在Butterknife的情況下爲Unbinder),並且可以通過生成的類訪問視圖字段的方法。 –

相關問題