2016-05-20 4 views
1

編集可能であるかどうかによって背景を変更するEditTextが必要です。データバインディングはアンドロイドをバックグラウンドで再バインドします

EditTextを「編集可能」にすると、デフォルトのEditText背景ドロワブルが作成され、そうでなければ透明な背景(単純なtextViewのように見える)が得られます。

android:background="@{viewModel.editable ? android.R.drawable.edit_text : android.R.color.transparent}" 

をそして、それは、コンパイルや実行時に例外をスローしませんが、私のEditTextが変数「編集可能」が変更されたときに何の背景と何も変化がないように見える:

私はこれをやりました。

私の変数の編集可能なバインド可能な変数は次のように定義されています。

@Bindable 
boolean editable; 

public boolean isEditable() { 
    return editable; 
} 

public void setEditable(boolean editable) { 
    this.editable = editable; 
    notifyPropertyChanged(BR.editable); 
} 

誰かがブール値に応じて描画可能リソースを与えることについての手掛かりを持っていますか?

答えて

3

Custom Conversionsセクションのデータバインディングライブラリのドキュメントによると、あなたの三元表現ではなく、Javaの表記を、リソース定数のためのXML表記を使用する必要がありますが:

android:background="@{viewModel.editable ? @android:drawable/edit_text : @android:color/transparent}" 
+4

これが正しい答えですが、あなたに感謝!しかし、私と同じ結果を得たい人は、上記のリンクを慎重に読めば、セッター(drawableとcolor)で2種類のタイプを使うことはできません。透明な背景を持つドロアブルを作成するだけで、このトリックができます。 – MHogge

+0

ご理解いただきありがとうございます!私はこれを考えましたが、試してみる時間がありません。 –

関連する問題