Sto tentando di utilizzare l'associazione dati con visualizzazioni personalizzate (un possibile utilizzo di George Mount ha mostrato here).L'associazione dati Android non funziona con gli attributi <merge>
Non si può immaginare di costruire viste composte senza il tag <merge>
. Tuttavia, in questa situazione associazione dati fallisce:
MyCompoundView
classe:
public class MyCompoundView extends RelativeLayout {
MyCompoundViewBinding binding;
public MyCompoundView (Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
binding = MyCompoundViewBinding.inflate(inflater, this, true);
}
my_compound_view.xml
: da app:isGone="@{!data.isViewVisible}"
ho sperato per controllare la visibilità di tutta la vista composita
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<data>
<variable name="data" type="com.example.MyViewModel"/>
</data>
<merge
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:isGone="@{!data.isViewVisible}">
<ImageView
android:id="@+id/image_image"
android:layout_width="60dp"
android:layout_height="60dp"
app:imageUrl="@{data.imagePhotoUrl}"/>
<!-- tons of other views-->
</merge>
</layout>
Gli errori di compilatore:
Error:(13) No resource identifier found for attribute 'isGone' in package 'com.example'
Error:(17, 21) No resource type specified (at 'isGone' with value '@{!data.isViewVisible}').
Ho tutto il necessario d metodi @BindingAdapter
. Ora ereditare la vista da FrameLayout
e utilizzare <RelativeLayout>
anziché <merge>
e funziona. Ma ho un layout annidato in più.
Domanda:merge
attrs sono ignorati. C'è un modo per aggirare questo?
Android Studio 1.5.1 stabile
Gradle plug com.android.tools.build:gradle:1.5.0
è meglio se si utilizza anziché . –
@Rakeeb Rajbhandari, sì, il databinding funziona bene con il tag ''. Tuttavia, questo non risolverà il problema del viewgroup aggiuntivo mentre si gonfia la visualizzazione personalizzata. –
Si prega di dare un'occhiata alla mia domanda. Sto usando include tag e inner class. https://stackoverflow.com/q/45143721/5214893 –