2017-04-20 8 views
1

Ich versuche, dynamisch zu verstecken/zeigen ein Element in meinen Ansichten, also folgte ich dieses Beispiel Dynamically toggle visibility of layout elements with Android data-binding.Android Layout Datenbindung wird nicht funktionieren

I

  • Android Studio 2.3.1
  • compileSdkVersion verwenden 23
  • buildToolsVersion '25 .0.2'
  • minSdkVersion 15
  • targetSdkVersion 17

Mein erstes Problem ist die Fehlermeldung „Attribut fehlt den Android-Namensraum“, aber alle Beispiele kann ich den Namespace nicht bieten finden Sie

enter image description here

doch ich versuchte, mein Projekt zu starten und eine andere Fehlermeldung erhalten:

android:visibility="@{@bool/list_show_icon ? View.VISIBLE : View.GONE}" 

Error:(22, 29) No resource found that matches the given name (at 'visibility' with value '@{@bool/list_show_icon ? View.VISIBLE : View.GONE}'). 

Es scheint, dass er nicht zu bewerten, nicht versuchen, den Ausdruck

Antwort

1

Fügen Sie Ihre Wurzel LinearLayout innerhalb layout Tag

<layout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <data> 
    <import type="android.view.View"/> 
    </data> 
    <LinearLayout> 
    </LinearLayout> 
</layout> 
0

Erste Regel DataBinding verwenden, dass Ihr Stammelement von XML <layout>

ein Teil <layout> ist, nicht andere Layouts sein muss. In Ihrem Fall sollte es sein

<layout> 
    <data> </data> 
    <LinearLayout> 

    </LinearLayout> 
</layout> 
0

Wie Kishore schrieb es bereits.

muss das Stammelement sein und das gesamte Layout + Daten umhüllen.

Seine

<layout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <data> 
     <import type="android.view.View" /> 
    </data> 
<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="?android:attr/activatedBackgroundIndicator" 
     android:minHeight="56dp" 
     android:orientation="horizontal" 
     android:paddding="8dp"> 
    </LinearLayout> 
</layout> 

Wie auch immer, wenn Sie Datenbindung verwenden, empfehle ich eine beobachtbare Boolean/Integer anstelle der Verwendung der Sichtbarkeit Logik innerhalb des Layouts.

private boolean ObservableInt isVisible = new ObservableInt(View.GONE); 
private void changeVisibility(boolean visible) { isVisible.set(visible ? View.VISIBLE : View.Gone); } 

Es ist nur sauberer, aber tut Einfluss auf die Leistung oder etwas: Dies kann in Ihrem Viewmodel (MVVM) mit einem Ansichtsmodell wie

<data> 
    <variable name="viewModel" type="YourViewModelClass" /> 
</data> 

<LinearLayout> ... <TextView android:visibility="@{viewModel.isVisible}" /> 
</LinearLayout> 

und unter Verwendung gelöst werden.

Verwandte Themen