Hoy vamos a ver cómo adjuntar o asociar información (como un objeto, una cadena, etcétera) a una vista o View de Android para poder obtenerla más tarde.
Es decir, vamos a guardar un trozo de información o una variable dentro de un objeto de tipo View, usando el método setTag
para establecerlos, y getTag
para obtenerlos.
También vamos a ver cómo declarar los id a utilizar, pues debemos ser cuidadosos con la declaración de los mismos al usar getTag y setTag en Android.
Por cierto, si eres desarrollador web o conoces JavaScript, estas funciones son parecidas a los atributos data.
Asociar información con setTag
Podemos invocar a setTag
en cualquier objeto de tipo View
, es decir, un TextView, EditText, etcétera. La sintaxis es:
objeto.setTag(id, variable);
En donde:
id
: Es un id que debemos declarar en un archivo XML y al que se puede acceder desdeR.id
variable
: una variable de cualquier tipo
Ejemplo de setTag: declarar id
Para usar setTag
debemos declarar valores en un archivo XML. Por ejemplo, yo he declarado los míos en un archivo ubicado en res/values/ids.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="etiqueta_talla" />
<item type="id" name="etiqueta_color" />
</resources>
Esto es muy importante, ya que si invocamos a setTag
sin indicar un id definido de esta forma, se generará una excepción.
Ahora sí, setTag
Cuando lo hemos definido, podemos asociarle información a una View. Por ejemplo:
EditText editText = new EditText(getActivity());
editText.setTag(R.id.etiqueta_talla, talla);
Dentro del ejemplo estamos declarando un nuevo EditText
. En mi caso es uno dinámico, pero también es válido si fue obtenido con findViewById
.
Después invoco a setTag
pasándole el id, y el valor. En este caso, la variable talla
es una cadena.
Nota: puedes invocar a setTag
cuantas veces quieras, simplemente define más ids.
Obtener elementos con getTag
Ya hemos asociado información a una vista, ahora veremos cómo recuperarla. En la mayoría de listeners (por ejemplo, en el click de un botón) se nos pasa un objeto de tipo View; para recuperar el valor hacemos lo siguiente:
buttonGuardarPackingList.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String talla = (String) v.getTag(R.id.etiqueta_talla);
}
});
Así se recuperaría la información dentro de un listener, obviamente en este caso deberíamos haber agregado una tag a buttonGuardarPackingList
anteriormente.
Si tu elemento es dinámico o lo obtienes de otra forma, puedes recuperar el valor así:
String talla = (String) editText.getTag(R.id.etiqueta_talla);
En ambos casos tienes que hacer un casteo; como guardamos una cadena lo convertimos a String
, si guardas otro tipo de dato simplemente realiza la conversión adecuada.
No olvides que debes obtener el valor usando el mismo id, en este caso utilicé R.id.etiqueta_talla
tanto para invocar a setTag
como a getTag
.
Así es como podemos asociar información a las vistas con Android, aunque claro, esto será en pocas ocasiones, pues siempre es mejor usar por ejemplo un RecyclerView con un adaptador.