Beim Versuch, die Sichtbarkeit der View
Verwendung einer benutzerdefinierten Variablen festzulegen, tritt jedoch ein Fehler auf : Identifiers must have user defined types from the XML file. visible is missing it
. Ist es möglich, die Sichtbarkeit der Ansicht mithilfe der Datenbindung festzulegen? Vielen Dank.
<data>
<variable
name="sale"
type="java.lang.Boolean"/>
</data>
<FrameLayout android:visibility="@{sale ? visible : gone}"/>
android
android-databinding
Konstantin Konopko
quelle
quelle
Antworten:
Wie im Android Developer Guide angegeben , müssen Sie dies folgendermaßen tun:
<data> <import type="android.view.View"/> <variable name="sale" type="java.lang.Boolean"/> </data> <FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>
quelle
In Ihrem Layout:
<data> <variable name="viewModel" type="...."/> </data> <View android:layout_width="10dp" android:layout_height="10dp" android:visibility="@{viewModel.saleVisibility, default=gone}"/>
In Ihrem ViewModel-Java-Code:
@Bindable public int getSaleVisibility(){ return mSaleIndecator ? VISIBLE : GONE; }
quelle
@Bindable
. Als ich hinzufügte, dass ich verschiedene Bindungsfehler bekam, einschließlich des Vorschlags zur ErweiterungBaseObservable
. Guter Zeiger hierLiveData<Boolean>
?Das Problem ist , dass
visibility
eine istInteger
auf derView
Klasse, das heißt , Sie haben zwei Möglichkeiten , diese Arbeit zu machen:View.VISIBLE
undView.GONE
. https://developer.android.com/topic/libraries/data-binding/index.html#importsvisibility
das eine nimmtBoolean
. https://developer.android.com/topic/libraries/data-binding/index.html#custom_settersMögliche Implementierung:
@BindingAdapter("android:visibility") public static void setVisibility(View view, Boolean value) { view.setVisibility(value ? View.VISIBLE : View.GONE); }
Welches wird
<FrameLayout android:visibility="@{sale}"/>
Arbeit machen .quelle