私は単純な AppCompatEditText を作成して OnFocusChangeListener を追加し、それを単純な TextInputLayout に入れています。
AppCompatEditText がフォーカスを失った場合、そのコンテンツは isValidParam メソッドによって検証される必要があります。
昨日までは rev.23.0.3 を使っていたのですが、rev.24.0.2 を使うと isValidParam メソッドの 1 行目で以下のようなエラーが出ます。
java.lang.ClassCastException: android.widget.FrameLayout は android.support.design.widget.TextInputLayout にキャストできません
デバッグモードで確認しました。AppCompatEditText.getpParent() は、実際には TextInputLayout ではなく Framelayout を返します。
LinearLayout llParams = new LinearLayout(context);
llParams.setOrientation(LinearLayout.VERTICAL);
// Create label for param
final TextInputLayout tilParam = new TextInputLayout(context);
// Add label into layout
llParams.addView(tilParam);
// Create Editor for param
final AppCompatEditText etParam = new AppCompatEditText(context);
edParam.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus)
if (isValidParam(etParam)) {
do some thing;
} else {
do other thing;
}
}
});
tilParam.addView(etParam);
// validation method
boolean isValidParam(AppCompatEditText editText) {
TextInputLayout til = (TextInputLayout) editText.getParent();
String text = editText.getText().toString().trim();
if (!text.equls("some criteria") {
till.setError("Error text")
return false;
}
return true;
}