Ver encuadernación: ¿cómo obtengo una encuadernación para los diseños incluidos?
⏰ 8 minutos de lectura
artur kasprzak
Mientras trabajaba con el enlace de vista, me encontré con un par de casos sin documentar.
Primero: ¿Cómo obtengo el enlace para las partes del diseño de vista incluidas? El enlace principal solo ve los elementos definidos en el diseño principal.
Segundo: ¿Cómo obtengo enlaces para partes de diseño fusionadas? Nuevamente, ¿el enlace principal solo ve elementos en el diseño principal?
La otra forma simple sería usar la biblioteca de enlace de datos. Luego envuelva su diseño XML con la etiqueta para que, si está utilizando la biblioteca, genere automáticamente las clases necesarias para vincular las vistas en el diseño con sus objetos de datos. Honestamente, creo que es el camino a seguir. Sigue la guía aquí
– Arun Gurung
27 de abril de 2020 a las 10:54
Hola, he escrito una publicación de blog que explica completamente el enlace de vista y junto con el manejo de la etiqueta incluida con la combinación y el pago de diseños incluidos 👉Androidbites|Visualización de enlaces
– Chetan Gupta
6 de diciembre de 2020 a las 10:54
Estoy un poco atrapado aquí: stackoverflow.com/questions/67808297/…
– SharePeng Hu
4 de junio de 2021 a las 9:09
Por cierto, para cualquiera que se pregunte cómo usar el enlace de vista para configurar el logotipo de la barra de aplicacionessolo use el objeto de oferta como: vinculante.barra de herramientas.setLogo(R.drawable.bar_logo);. Cambios en ‘binding’ y ‘bar_logo’ según su necesidad.
– Ajowi
13 de agosto de 2021 a las 5:51
artur kasprzak
En caso de:
Incluir con diseño genérico (no fusionar nodo), necesitamos asignar ID a la parte incluida, de esta manera en el enlace tendremos acceso a la subparte incluida
private lateinit var exampleBinding: ActivityExampleBinding //activity_example.xml layout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
exampleBinding = ActivityExampleBinding.inflate(layoutInflater)
setContentView(exampleBinding.root)
//we will be able to access included layouts view like this
val includedView: View = exampleBinding.yourId.idOfIncludedView
//[...]
}
Incluir con bloque de combinación en diseño externo. No podemos agregarle ID porque el bloque de combinación no es una vista. Digamos que tenemos un diseño de combinación eterno (merge_layout.xm):
Para vincular correctamente dicho diseño de combinación, necesitamos:
En tu código de actividad:
private lateinit var exampleBinding: ActivityExampleBinding //activity_example.xml layout
private lateinit var mergeBinding: MergeLayoutBinding //merge_layout.xml layout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
exampleBinding = ActivityExampleBinding.inflate(layoutInflater)
//we need to bind the root layout with our binder for external layout
mergeBinding = MergeLayoutBinding.bind(exampleBinding.root)
setContentView(exampleBinding.root)
//we will be able to access included in merge layout views like this
val mergedView: View = mergeBinding.someView
//[...]
}
tuvo que agregar el layout etiqueta dentro del archivo que contiene las vistas combinadas
– Joao Carlos
5 de junio de 2020 a las 13:49
Estoy tratando de hacer esto en un fragmento en lugar de una actividad y no funciona. Configuré global_header como id de mi elemento de inclusión y, de hecho, el autocompletado en Android Studio funciona perfectamente bien y autocompleta viewBindings.globalHeader, por lo que se genera para el enlace, pero luego en tiempo de ejecución se bloquea: ” java.lang.NullPointerException: Falta requerido ver con ID: com.daon.ps.daonsonboard:id/global_header”
– Fran Marzoa
28 de septiembre de 2020 a las 12:08
@FranMarzoa ¿Está seguro de que realiza todas las operaciones necesarias en Fragments onCreateView? me gusta: val binding = FrgamentSomethingSomething.inflate(layoutInflater) y return binding.root
-Artur Kasprzak
29 de septiembre de 2020 a las 13:12
@FranMarzoa También ten en cuenta que binding.globalHeader no devolverá la vista: será GlobalHeaderBinding (o lo que sea que haya llamado archivo con diseño) y dentro encontrará todas las vistas incluidas.
-Artur Kasprzak
29 de septiembre de 2020 a las 13:21
Se bloqueó mientras inflaba el diseño, ni siquiera tuve la oportunidad de acceder a él. De todos modos, encontré una solución y una buena explicación del problema aquí: stackoverflow.com/a/52343338/1160360
– Fran Marzoa
1 de octubre de 2020 a las 9:08
Emad Razavi
Con respecto a su primera pregunta, puede obtener un enlace de vista para el diseño incluido.
aquí hay una muestra main_fragment.xml expediente:
public class MainFragment extends Fragment {
private MainFragmentBinding binding;
private ToolbarBinding toolbarBinding;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = MainFragmentBinding.inflate(inflater, container, false);
toolbarBinding = binding.toolbar;
return binding.getRoot();
}
@Override
public void onDestroy() {
super.onDestroy();
toolbarBinding = null;
binding = null;
}
}
Ahora tiene dos enlaces: uno corresponde al diseño principal y el otro corresponde al diseño incluido.
Respuesta muy simple y usa la nueva sintaxis: todo funciona para mí en una Actividad que no es Fragmento con una sintaxis similar en onCreate(). Gracias. (Solo tengo un poco de problemas para usar por un DrawerLayout)
– Monje Gordo
16 de abril de 2020 a las 14:38
Obtengo un NPE en tiempo de ejecución que dice que falta la vista requerida con ID blah.
– Asim
20 de mayo de 2020 a las 8:41
@Asim Tal vez si cambia su diseño incluido de fusionar a algún grupo de vista
Asegúrese de que si la raíz principal principal de enlace de su diseño principal es LinearLayout, entonces, el diseño principal incluidoLayoutBinding también será un diseño lineal
No es necesario vincular explícitamente el diseño incluido, se realiza automáticamente si especifica una identificación para él: <include android:id="@+id/myToolbar" layout="@layout/toolbar" />. Después de eso, el campo mainLayoutBinding.myToolbar contendrá un enlace anidado.
– Dmitri K.
2 de junio de 2021 a las 14:07
@DmitryK en realidad es necesario, ya que de lo contrario Android Studio Arctic Fox da errores Cannot access class 'x'. Check your module classpath for missing or conflicting dependencies
– Michał Dobi Dobrzański
27 oct 2021 a las 8:27
shivang
Supongamos que incluí un diseño en mi activity_main.xml archivo de la siguiente manera:
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
La otra forma simple sería usar la biblioteca de enlace de datos. Luego envuelva su diseño XML con la etiqueta para que, si está utilizando la biblioteca, genere automáticamente las clases necesarias para vincular las vistas en el diseño con sus objetos de datos. Honestamente, creo que es el camino a seguir. Sigue la guía aquí
– Arun Gurung
27 de abril de 2020 a las 10:54
Hola, he escrito una publicación de blog que explica completamente el enlace de vista y junto con el manejo de la etiqueta incluida con la combinación y el pago de diseños incluidos 👉Androidbites|Visualización de enlaces
– Chetan Gupta
6 de diciembre de 2020 a las 10:54
Estoy un poco atrapado aquí: stackoverflow.com/questions/67808297/…
– SharePeng Hu
4 de junio de 2021 a las 9:09
Por cierto, para cualquiera que se pregunte cómo usar el enlace de vista para configurar el logotipo de la barra de aplicacionessolo use el objeto de oferta como: vinculante.barra de herramientas.setLogo(R.drawable.bar_logo);. Cambios en ‘binding’ y ‘bar_logo’ según su necesidad.
– Ajowi
13 de agosto de 2021 a las 5:51