Essayez de définir la visibilité de View
à l'aide d'une variable personnalisée, mais une erreur se produit: Identifiers must have user defined types from the XML file. visible is missing it
. Est-il possible de définir la visibilité de la vue à l'aide de la liaison de données? Merci.
<data>
<variable
name="sale"
type="Java.lang.Boolean"/>
</data>
<FrameLayout Android:visibility="@{sale ? visible : gone}"/>
Comme indiqué dans le Guide du développeur Android , vous devez procéder comme suit:
<data>
<import type="Android.view.View"/>
<variable
name="sale"
type="Java.lang.Boolean"/>
</data>
<FrameLayout Android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>
Dans votre mise en page:
<data>
<variable
name="viewModel"
type="...."/>
</data>
<View
Android:layout_width="10dp"
Android:layout_height="10dp"
Android:visibility="@{viewModel.saleVisibility, default=gone}"/>
Dans votre code ViewModel Java:
@Bindable
public int getSaleVisibility(){
return mSaleIndecator ? VISIBLE : GONE;
}
Le problème est que visibility
est un Integer
sur la classe View
, cela signifie que vous disposez de deux méthodes pour que cela fonctionne:
View.VISIBLE
et View.GONE
. https://developer.Android.com/topic/libraries/data-binding/index.html#importsvisibility
prenant un Boolean
. https://developer.Android.com/topic/libraries/data-binding/index.html#custom_settersMise en oeuvre possible:
@BindingAdapter("Android:visibility")
public static void setVisibility(View view, Boolean value) {
view.setVisibility(value ? View.VISIBLE : View.GONE);
}
Ce qui fera fonctionner <FrameLayout Android:visibility="@{sale}"/>
.