私はUI要素のセットTextView、EditText、さらにそれらにsetError(CharSequenceエラー)メソッドを持つカスタムビューを持っています。私はsetError(null)を呼び出すのに役立つシンプルなユーティリティクラスを作成しています。このために、私は特定のメソッドを持つインターフェイスにAndroidビューをキャストするにはどうすればよいですか?
ValidationUtils validator = ValidationUtils.getInstance();
validator.put(etEmail);
validator.put(etPassword);
...好きで、一般的なバリのputに初期化できるユーティリティクラスValidationUtilsを書いたことはViewオブジェクトになります。 AndroidビュークラスはsetError(CharSequenceエラー)を持たないようですが、EditTextなどの個々のUIクラスはそうです。私はすべてのエントリをMapの中に入れて保存し、次に
validator.clearAll
を呼び出してこのマップを反復し、すべてのクラスでsetErrorを呼び出してnullを設定します。私のようなインターフェース書かれています:
public interface Validatable {
void setError(CharSequence errorMsg);
}
をしかし、非常に私は私が後でSETERRORを呼び出すことができるように、このインターフェイスにキャストプット経由で追加された要素を()することで進行するであろう方法を見つけ出すことはできません。今プットを呼び出す
は、基本View
クラスは、あなたのインターフェイスを実装しますするための方法はありませんので、あなたは、それを行うことはできません私にjava.lang.ClassCastException: android.support.v7.widget.AppCompatEditText cannot be cast to Validatable
あなたは正しいです。しかし、私はこれを回避する方法を見つけたかもしれないと思う。ライブラリ "バターナイフ"は、コンパイル時にJavaPoetを使用して既存のアクティビティクラスを拡張し、必要なインタフェース(Butterknifeの場合Unbinder)を実装し、生成されたクラスを介してビューフィールドのメソッドにアクセスできるようにすることでこれを克服しているようです。 –