Android 在TextInputLayout中编辑未命名的EditText会引发FrameLayout无法转换为EditText错误
我以这种方式在TextInputLayout中制作了一个EditText:Android 在TextInputLayout中编辑未命名的EditText会引发FrameLayout无法转换为EditText错误,android,android-edittext,android-textinputlayout,Android,Android Edittext,Android Textinputlayout,我以这种方式在TextInputLayout中制作了一个EditText: public class Field{ private Context context; private TextInputLayout layo; public void build(){ layo=new TextInputLayout(context); layo.setLayoutParams(new LinearLayout.LayoutParams(L
public class Field{
private Context context;
private TextInputLayout layo;
public void build(){
layo=new TextInputLayout(context);
layo.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
container.addView(layo);
final EditText field = new EditText(context); // Crear objeto
field.setLayoutParams(new TextInputLayout.LayoutParams(TextInputLayout.LayoutParams.MATCH_PARENT,TextInputLayout.LayoutParams.WRAP_CONTENT));
layo.addView(field);
现在,我想更改这个未命名的EditText中的文本,我不能命名它,因为它可能是另一种类型,所以我尝试了getChildAt
它抛出以下错误:
java.lang.ClassCastException:android.widget.FrameLayout无法强制转换为android.widget.EditText
我不知道为什么它会在TextInputLayout中找到FrameLayout,知道吗?你会在Layout上找到一个方法
返回用于文本输入的EditText
所以你可以这么做
EditText field = layo.getEditText();
field.setText(mytext);
TextInputLayout有一个内部结构,它不仅仅由您看到的内容组成。上次我检查时,至少有一个额外的框架布局用于容纳装饰器文本视图,如果有更多,我不会感到惊讶。最重要的是,内部结构偶尔会发生变化,有不同的版本。您可以使用getEditText方法获取TextInputLayout的EditText,而不是使用ViewGroup方法自己查找它。
EditText field = layo.getEditText();
field.setText(mytext);