En mi archivo xml de diseño, he incluido otro archivo xml de diseño (cada uno con una identificación de Android diferente).
<include layout="@layout/view_contact_name" android:id="+id/test1"/>
<include layout="@layout/view_contact_name" android:id="+id/test2"/>
Pero cuando lo ejecuto en el emulador e inicio Hierarchy Viewer, cada uno de los diseños todavía muestra 'NO_ID', y en mi código, tengo
findViewById(R.id.test1)
y findViewById(R.id.test2)
ambos devuelven nulo.
¿Alguien puede ayudarme con mi problema?
android
android-layout
hap497
fuente
fuente
@
símbolo.Respuestas:
Especifique el ID en el
<include>
Luego use dos
findViewById
para acceder a los campos en el diseñoCon ese enfoque, puede acceder a cualquier campo en cualquier inclusión que tenga.
fuente
merge
ni siquiera en teoría, porque el resultado de incluir amerge
no es una vista única, sino un montón de ellas. Entonces está bien.Descubrí que si está utilizando una
<merge>
etiqueta en su diseño de inclusión, entonces el ID de inclusión se transfiere a la etiqueta de combinación, que no es una vista real.Entonces, elimine la combinación o reemplácela con algún diseño.
Tor Norbye escribió :
fuente
Romain Guy indica que puede anular el ID de un diseño incluido colocando un
android:id
atributo dentro de la<include>
etiqueta.fuente
Creo que la respuesta principal pasa por alto el punto más importante y podría inducir a error a las personas a pensar que la
<include/>
etiqueta crea una Vista que contiene los contenidos incluidos.El punto clave es que el ID de inclusión se pasa a la vista raíz del archivo de diseño de inclusión.
Lo que significa que esto:
Se convierte en esto:
fuente
sí es así, pero tenga cuidado cuando el diseño insertado en el campo de inclusión es personalizado y desea acceder a ese diseño raíz. Ese diseño en este caso @ diseño / prueba de prueba, en realidad se devuelve en la primera línea.
fuente
fuente
El problema es que intentamos usar una identificación que no está declarada en el archivo de diseño actual. En lugar de declarar nuevamente, id se puede simplemente referir usando
@+id/
. Si refactoriza el nombre de identificación original a través de Android Studio, también se refactoriza en el diseño incluido.fuente
En el caso de usar,
<RecyclerView>
busque el id de<include>
usando una instancia de vista inflada o de lo contrario devolverá nulo .fuente
Si ha establecido id en cualquiera de las etiquetas raíz del diseño incluido, puede usar ese id o puede establecer el id en el diseño incluido.
Pero no puede establecer id en ambos, puede generar una excepción.
O
fuente
Cuando se habla de inclusión, tiene una identificación en la vista raíz dentro del archivo de diseño incluido o en la línea de inclusión en sí y no en ambas. Por ejemplo:
Diseño 1 archivo
El ejemplo anterior es incorrecto porque técnicamente tiene dos identificaciones declaradas para el mismo diseño. Entonces, lo que tienes que hacer es elegir qué elemento tendrá la identificación.
fuente
Vaya, no puedo creer que esta pregunta aún no tenga la respuesta correcta. Es simple, las etiquetas apestan. Solo puede cambiar las cosas que comienzan con las
android:layout_
queandroid:id
no coinciden. Entonces la respuesta es que no puedes. Lo siento. Lo que puede hacer en su lugar es crear una clase que será un ViewGroup que inflará las vistas incluidas en el interior, luego agregará eso como una etiqueta en su diseño, pero eso es todo.fuente