Diseño TabHost y DataBinding
He leído sobre el enlace de datos android y quiero usarlo en mi aplicación, pero no en la fase de diseño xml.
Tengo activity_main.xml
como este:
- El enlace de datos de Android no funciona
- Operaciones aritméticas en el diseño - vinculación de datos de Android
- La vinculación de dos vías de Android con tipo entero hace que la conexión de datos no exista
- Utilizar el complemento Android DataBinding en paralelo con Google Plugin de servicios
- ¿Cómo puedo pasar varios argumentos a través de xml para un setter personalizado cuando se utiliza el enlace de datos de Android
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> </data> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/tab1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/tab1"/> </LinearLayout> </FrameLayout> </LinearLayout> </TabHost> </layout>
Y tab1.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout <EditText ...
Quiero aplicar enlace de datos a la última EditText
, pero si inserto
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> </data> <TabHost> ...
esto causa
activity_main.xml:9: AAPT: Error parsing XML: duplicate attribute
La pregunta es, ¿cómo debo combinar enlace de datos y TabHost
para enlazar EditText
en el diseño incluido?
Aquí está el repo con el código de la pregunta
- Generar errores con el nuevo kotlin 1.1, kapt no puede analizar parámetros de conexión de datos
- botón de enlace de datos onclick no funciona
- Enlace de datos bidireccional con doble valor en EditText
- Ejemplo de enlace de datos de 2 vías de android no funcionan como se describe
- Android DataBinding en RecyclerView.ViewHolders con diferentes diseños
- No se puede resolver la clase de enlace de datos de Android
- Enlace de datos con srcCompat
- Cómo vincular el diseño con varios calificadores
Aquí está su sugerencia XML: duplicate attribute
. Incluso le dice un número de línea en el mensaje de error, 9, que está aproximadamente dentro del elemento TabHost.
Ahora, ¿qué atributo XML se duplica? El espacio de nombres ( xmlns:android
)
Elimine el que no esté en el elemento superior del XML en la etiqueta de diseño
El problema es con xmlns:android
Sólo xmlns:android="http://schemas.android.com/apk/res/android"
quitar este xmlns:android="http://schemas.android.com/apk/res/android"
y su hecho.
En cuanto a DataBinding
, no creo que lo han implementado, excepto que la etiqueta
Toma <data>
en tu activity_main.xml
<data> <variable name="name" type="String"/> </data>
Pase con el diseño incluido
<include layout="@layout/tab1" app:name="@{name}"/>
Ahora captura esos datos dentro de tu tab1.xml
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="name" type="String"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/edit1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_column="1" android:layout_row="0" android:ems="1" android:inputType="text" android:text="@{name}" /> </LinearLayout> </layout>
Casi has terminado, ahora solo necesitas implementar la vinculación en tu actividad
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main); binding.setName("Email Address");
Dos errores que puedo ver aquí, usted utilizó el espacio de nombre xmlns
dos veces, y tab1
id dos veces. Quite un espacio de nombre y cambie ID.
<LinearLayout android:id="@+id/tab1" /* you used tab1 here as id*/ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/tab1"/> /* you used tab1 here as id */
- Regresar a la actividad principal con un error de actividad padre en el manifiesto
- Android: java.lang.IllegalStateException: base de datos xxx.db (conn # 0) ya cerrado