ViewBinding: ¿cómo obtener el enlace para los diseños incluidos?
11
Mientras trabajo con ViewBinding me encuentro con pocos casos no documentados.
Primero: ¿Cómo obtener el enlace para las partes de diseño de vista genérica incluidas, el enlace principal solo ve los elementos en el diseño principal?
Segundo: ¿Cómo obtener el enlace para las partes de diseño de tipo de fusión incluidas, nuevamente el enlace principal ve solo los elementos en el diseño principal?
Incluir con diseño genérico (no nodo de fusión), 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 layoutoverride 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 fusión en diseño externo. No podemos agregarle ID porque el bloque de fusión no es una vista. Digamos que tenemos un diseño de fusión eterno (merge_layout.xm):
Para enlazar correctamente dicho diseño de combinación, necesitamos:
En su código de actividad:
private lateinit var exampleBinding:ActivityExampleBinding//activity_example.xml layoutprivate lateinit var mergeBinding:MergeLayoutBinding//merge_layout.xml layoutoverride 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//[...]}
Respuesta muy simple y utiliza la nueva sintaxis: todo funciona para mí en una actividad sin fragmentos con una sintaxis similar onCreate(). Gracias. (Solo me cuesta un poco usarlo para a DrawerLayout)
Fat Monk
0
La otra forma simple sería usar la biblioteca de enlace de datos. Luego, ajuste su diseño XML con una 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í
Su primera pregunta, que es trabajar con un diseño incluido usando ViewBinding, puede resolverse tan fácilmente.
Aquí hay un archivo de ejemplo main_fragment.xml
Y MainFragment.java puede ser así
Ahora, tienes dos enlaces. uno de ellos es el predeterminado y el siguiente es del diseño incluido.
fuente
onCreate()
. Gracias. (Solo me cuesta un poco usarlo para aDrawerLayout
)La otra forma simple sería usar la biblioteca de enlace de datos. Luego, ajuste su diseño XML con una 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í
fuente