2017-05-15 10 views
4

列挙型を使用してデータバインディング式を作成し、ビュー要素の可視性を制御することは可能ですか?私は何を達成したいことは、次のAndroid:列挙型のデータバインディング式

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:visibility="@{user.editType == EditType.EDIT_PROFIL ? View.VISIBLE : View.GONE}"> 

EditTypeクラスは、私は私のLinearLayoutの可視性を制御するためにXMLの中、この列挙体を使用することができる場合、それは素晴らしいだろう

public enum EditType { 
    NONE, 
    EDIT_PROFIL, 
    EDIT_ADDRESSES; } 

非常にシンプルです。

これを達成する方法を知りましたか?

答えて

10

私には、あなたが達成したいことが可能であり、タグの不足を除いて何かが間違っているとは思われません。私はそれを参照してください...

<data> 
<import type="com.example.my.app.EditType"/> 
</data> 
-3

これはJavaコードであり、xmlではありません。

public enum EditType { 
NONE, 
EDIT_PROFIL, 
EDIT_ADDRESSES; } 

LinearLayout ll = (LinearLayout) findViewById(R.id.ll); 
if(user.editType == EditType.EDIT_PROFIL){ 
    ll.setVisibility(View.VISIBLE); 
}else{ 
    ll.setVisibility(View.GONE); 
} 
0

ロジックをUIから分離することをお勧めします。可視性のすべてのロジックは、異なるコードでJavaコードで実行する必要があります。あなたのActivity/FragmentのOnCreate()メソッドで実装されている場合、@Demo_Mailのようなものが動作すると言われますが、データバインディングタグを読み取ると、実行中の任意の時点でこれを動的に実行することができます。私が間違っている)。その場合、ユーザーが列挙型の値を選択した瞬間に実行されるOnClick()またはOnSelectItem()メソッドを作成することをお勧めします(たとえば、comboBox内)。このメソッドはビューの可視性を設定します。

+0

動的ではありません。 onCreateの開始時に私はデータバインディングリソースを設定しました。これで可視性を制御したいと思います。私はxmlでenumを使うことができれば、はるかに読みやすくなります。それ以外の場合は、私のコード内のすべてのLinearLayoutを参照する必要があります...:D – jennymo

+0

私にはあなたが達成したいと思うものが可能で、タグの不足を除いて何かが間違っていますか?私は偉大なありがとう:) <インポートタイプ= "com.example.my.appを <インポートタイプ= "com.example.my.app.EditType"/> Shohn

+0

...それを参照してくださいいけません.EditType "/>行がそのトリックを行います。あなたがこれを答えとして掲示すれば、私はそれを正しい解決策としてマークし、いくつかの評判を得るでしょう:) – jennymo