1

我正在實現一個功能,以便在提示浮動時將提示文本更改爲大寫,反之亦然。從子項獲取父texInputlayout textInputEditText

爲此,我在其子textInputEditText上使用OnFocusChangeListener。爲了更容易實現我在喜歡我的活動實施View.OnFocusChangeListener

public class LoginActivity extends BaseActivity implements View.OnFocusChangeListener 

和覆蓋方法的活動,如:

@Override 
public void onFocusChange(View v, boolean hasFocus) { 
    if(findViewById(v.getId()) instanceof TextInputEditText){ 
     TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getParent(); 
     if(hasFocus){ 
      textInputLayout.setHint(textInputLayout.getHint().toString().toUpperCase()); 
     }else{ 
      textInputLayout.setHint(Utility.modifiedLowerCase(textInputLayout.getHint().toString())); 
     } 
    } 
} 

在上面的方法,我試圖讓觀使用線路父textInputLayout

TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getParent(); 

上面的代碼線拋出一個致命錯誤

java.lang.ClassCastException:android.widget.FrameLayout不能 投地android.support.design.widget.TextInputLayout

,這是非常明顯的,因爲它返回Framelayout不能在textInputLayout被鑄造

如果我用

TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getRootView(); 

再次拋出了一個致命的錯誤,因爲getRootView() retur ns DecorView哪些不能鑄造textInputLayout

我的問題是如何從子textInputEditText得到父母textInputLayout

請指導。

+0

爲什麼不在TextInputEditText這樣的xml佈局中爲TextInputLayout分配一個id? –

+0

@DanielRL我已經在xml中分配了id,但它不會在這裏工作,因爲我的重寫方法中的harcoding id只適用於'textinputlayout'而不適用於其他人,我希望它能用於佈局中的每個'textinputlayout' –

回答

2

我解決了這個問題,下面的一行代碼:

TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getParent().getParent(); 

它根據需要返回textInputlayout

0

您可以像這樣TextInputLayout添加ID:

<android.support.design.widget.TextInputLayout 
    android:id="@+id/nameLayout" 
    style="@style/LightInputLayoutNoBox" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/create_contact_account_data_name" 
    app:hintTextAppearance="@style/TextSmall.Bold"> 

    <android.support.design.widget.TextInputEditText 
     android:id="@+id/name" 
     style="@style/LightInputFieldNoBox" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:drawableEnd="@drawable/ic_book_contacts" /> 

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

而且在活動調用findViewById到TextInputLayout

+0

我已經在xml中分配了id,但它不會在這裏工作,因爲我的覆蓋方法中的harcoding id只適用於'textinputlayout'而不是其他人,我希望它能在佈局中的每個'textinputlayout'上工作。 –

+0

在android文檔中說你不能這麼做:https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html 因此,你必須通過textinputedittext來設置監聽器,並使用findviewbyid。 –

+1

請檢查我的答案丹尼爾。我解決了這個問題。反正thanx的幫助。 –