2017-05-15 2 views
4

ist es möglich, einen Databinding-Ausdruck zu erstellen und die Sichtbarkeit eines Ansichtselement mithilfe von Aufzählungen zu steuern? Was ich erreichen will, ist die folgendeAndroid: Databinding Ausdruck mit Enum-Vergleich

<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}"> 

Die EditType Klasse ist sehr einfach

public enum EditType { 
    NONE, 
    EDIT_PROFIL, 
    EDIT_ADDRESSES; } 

Es wäre fantastisch, wenn ich diese Aufzählung im XML verwenden kann, um die Sichtbarkeit meines LinearLayout zu steuern.

Hat jemand eine Idee, wie man das erreicht?

Antwort

10

Für mich scheint es, als was Sie erreichen möchten, ist möglich, und ich sehe nichts falsch außer vielleicht fehlt Ihnen das Tag? Ich sehe es nicht ...

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

Sie können dies ist Java-Code, nicht ist 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

Ich würde Ihnen empfehlen, die Logik von der Benutzeroberfläche zu trennen. Alle Logik der Sichtbarkeit sollte in Java-Code in verschiedenen Ereignissen erfolgen. Ich würde sagen, etwas wie @Demo_Mail vorgeschlagen würde funktionieren, wenn auf der OnCreate() -Methode Ihrer Aktivität/Fragment implementiert, aber das Lesen der Data-Binding-Tag schlägt mir vor, dass Sie dies dynamisch tun möchten, zu jedem Zeitpunkt im Lauf (korrigieren Sie mich, wenn Ich liege falsch). In diesem Fall würde ich vorschlagen, eine OnClick() - oder OnSelectItem() -Methode zu erstellen, die in dem Moment ausgeführt wird, in dem der Benutzer einen Wert der Enumeration (beispielsweise in einer ComboBox) auswählt. Diese Methode legt die Sichtbarkeit der Ansicht fest.

+0

Nein nicht dynamisch. Zu Beginn von onCreate habe ich einmal die Datenbindungsressource eingestellt und damit möchte ich die Sichtbarkeit kontrollieren. Es wäre viel besser lesbar, wenn ich die enum in der XML-Datei verwenden könnte. Ansonsten muss ich jedes LinearLayout innerhalb meines Codes referenzieren ...: D – jennymo

+0

Mir scheint es so, als ob was du erreichen willst ist möglich und ich sehe nichts falsch außer vielleicht fehlt dir das Tag? Ich nicht es sehen ... Shohn

+0

Große danke :) Die Linie macht den Trick. Wenn du dies als Antwort postest, werde ich es als die richtige Lösung markieren und du wirst etwas Ansehen bekommen :) – jennymo

Verwandte Themen