0

ビューグループ (LinearLayout) からFloating EditTextを取得しようとしています。シンプルなEditText 正常に動作しますが、うまくいきません。

ここに私のコードがあります:

XML コード:

<LinearLayout
            android:id="@+id/signup_form"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="64dp"
            android:orientation="vertical">

            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <EditText
                    android:id="@+id/et_name"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/hint_name"
                    android:inputType="textPersonName"
                    android:maxLines="1"
                    android:singleLine="true" />

            </android.support.design.widget.TextInputLayout>

Java コード:

for (int i = 0; i < layout.getChildCount(); i++) {

            View v = layout.getChildAt(i);

            if (v instanceof EditText) {

                EditText editText = (EditText) v;

                if (editText.getInputType() == InputType.TYPE_TEXT_VARIATION_PERSON_NAME + 1) {

                    isValid = validateName(et_name);

                    if (!isValid) {

                        break;
                    }

                } 

これ(android.support.design.widget.TextInputLayout)は LinearLayout と EditText の間にあり、解決方法がわかりません。

前もって感謝します

4

2 に答える 2

1

これはうまくいくはずです:

if (v instanceof TextInputLayout) {
    EditText editText = (EditText) v.getChildAt(0);

ただし、例外が発生しないように、さらにチェックを追加する必要があります。

于 2016-06-29T07:13:25.820 に答える
1

TextInputLayout には、内部の EditText を取得する getEditText メソッドがあります。

https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html#getEditText()

EditText を取得するために getChildAt を使用しないでください。

その代わり:

if (v instanceof TextInputLayout) {
    EditText editText = ((TextInputLayout) v).getEditText();
}
于 2016-06-29T08:22:01.290 に答える