2017-10-15 35 views
0

J'ai un Textview comme ceci:Impossible de définir le « android: fond » attribut avec databinding, obtenir un « objet] ne peut pas être converti pour voir » erreur

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@{message.isSelf() ? @drawable/bubble_blue : @drawable/bubble_grey}"/> 

Et le message.isSelf() est juste une méthode publique qui retourne un booléen.

Cependant, je reçois cette erreur lorsque vous essayez de compiler:

Error:(125, 141) error: incompatible types: Message cannot be converted to View 

Aller dans le code source de l'erreur, c'est la ligne de problème dans le produit databinding

var = ((messageIsSelf) ? (getDrawableFromResource(message, R.drawable.bubble_blue)) : (getDrawableFromResource(message, R.drawable.bubble_grey))); 

La méthode getDrawableFromResource prend une vue et un identifiable comme un paramètre:

/** @hide */ 
    protected static Drawable getDrawableFromResource(View view, int resourceId) { 
     if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { 
      return view.getContext().getDrawable(resourceId); 
     } else { 
      return view.getResources().getDrawable(resourceId); 
     } 
    } 

Pour certaines raisons n, mon objet de message est passé à la méthode au lieu d'une vue. Comment puis-je réparer ça? J'ai essayé de supprimer le dossier de construction mais n'aide toujours pas.

Répondre

0

Il se trouve son parce que j'avais à la fois un objet « message » et l'identifiant du TextView défini comme « message » qui était à l'origine du conflit. Changer l'identifiant a résolu le problème.

0
getDrawableFromResource(message, R.drawable.bubble_grey))); 

Dans la méthode ci-dessus vous envoyez un objet Message (je suppose message est un objet Message), mais la méthode a besoin d'un objet View (selon le code que vous avez fourni). C'est pourquoi vous obtenez cette erreur.

Essayez d'utiliser @android:drawable annotation:

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@{message.isSelf() ? @android:drawable/bubble_blue : @android:drawable/bubble_grey}"/>