Ver trampas de enlace y enlace de datos | Vincent T | Noviembre de 2021
Si he habilitado el enlace de datos en mi proyecto de Android, ¿todavía necesito el enlace de vista?
Suponga que tiene un diseño de fragmento como se muestra a continuación y desea agregar un enlace de vista a su proyecto.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
Habilitas esto viewBinding
En tu build.gradle(module)
.
buildFeatures
viewBinding true
Luego inflas el diseño del fragmento para onCreateView()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? val binding = FragmentFirstBinding.inflate(inflater)
// access view in this fragment
val textView = binding.textview
return binding.root
Ahora puedes visitar textView
De binding
No utilice findViewById()
Posteriormente, desea vincular los datos al diseño.
Tu reemplazas viewBinding
con dataBinding
como sigue:
buildFeatures
dataBinding true
Entonces, su código de repente no se puede compilar con este error:
Unresolved reference: FragmentFirstBinding
¿Entonces qué pasó?Este es Porque cuando usas dataBinding
, esta FragmentFirstBinding
No se genera automáticamente, debe definir un layout
La etiqueta raíz en el diseño del fragmento.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</layout>
Se da cuenta de que hay otros errores porque otros diseños aún no han definido la etiqueta raíz del diseño. En este caso, tiene 2 opciones.
- Agregue el elemento raíz del diseño a todos los diseños
- Habilitar ambos
viewBinding
condataBinding
Cuando usas dataBinding
, No todos los diseños necesitan vincular datos y usted es demasiado vago para agregar layout
La etiqueta raíz (no requerida), puede activar estas dos opciones.
buildFeatures
viewBinding true
dataBinding true
Todavía lo necesito viewBinding
Si he habilitado dataBinding
¿En mi proyecto de Android?
La respuesta es no si layout
La etiqueta raíz se ha definido en todos los archivos de diseño.. Esto también se llama «Diseño de enlace de datos«. De lo contrario, la respuesta es sí.