Android:无法找到父视图

时间:2017-02-24 12:46:21

标签: android view get parent

我的文件 layout.xml

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edit_name"
            android:hint="@string/name"
            />
</android.support.design.widget.TextInputLayout>

当我尝试让父母参与活动时

 EditText edit_name= (EditText) view.findViewById(R.id.edit_name);
 TextInputLayout textInputLayout = (TextInputLayout) edit_name.getParent();

错误

  

java.lang.ClassCastException:android.widget.FrameLayout无法强制转换为android.support.design.widget.TextInputLayout

5 个答案:

答案 0 :(得分:0)

您需要在TextInputLayout中设置id并使用id绑定,而不是使用getParent()绑定。

感谢。

答案 1 :(得分:0)

解决方法是为此TextInputLayout设置ID:

<android.support.design.widget.TextInputLayout
        android:id="@+id/edit_input_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edit_name"
            android:hint="@string/name"
            />
</android.support.design.widget.TextInputLayout>

EditText edit_name= (EditText) view.findViewById(R.id.edit_name);
 TextInputLayout textInputLayout = (TextInputLayout) view.findViewById(R.id.edit_input_layout);

答案 2 :(得分:0)

首先,你必须像这样在TextInputLayout中添加一个ID:

<android.support.design.widget.TextInputLayout
        android:id="@+id/text_input_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edit_name"
            android:hint="@string/name"
            />
</android.support.design.widget.TextInputLayout>

之后,您可以像获取EditText一样获取TextInputLayout。

答案 3 :(得分:0)

也许你想以不同的方式尝试TextInputLayout textInputLayout = (TextInputLayout) edit_name.getParent();

而不是使用:

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="testId"        >
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edit_name"
            android:hint="@string/name"
            />
</android.support.design.widget.TextInputLayout>

您可能想尝试:

XML:

TextInputLayout textInputLayout = (TextInputLayout) findViewById(R.id.testId);

代码:

<div>

答案 4 :(得分:0)

  

注意:TextInputLayout下的实际视图层次结构是NOT   保证匹配以XML编写的视图层次结构。结果是,   在TextInputLayout的子节点上调用getParent() - 例如   TextInputEditText - 可能不会返回TextInputLayout本身,但是   而是一个中间视图。如果您需要直接访问View,   设置一个android:id并使用findViewById(int)。

即。要解决此问题,您必须使用findViewById而不是getParent

来源是Android official documents