2011-03-09 13 views
20

Quiero pasar un valor que se generará en tiempo de ejecución, a través de un TextView. la propiedad de texto se usa para algunos otros datos y los datos que quiero pasar no se mostrarán. Entonces, es como una etiqueta oculta. ¿Es posible hacer con TextView? De ser así, qué propiedad de TextView.campo oculto/etiqueta en TextView?

Para simplificar, imagine que extraigo la ID y el TEXTO de la tabla de datos. Ahora el TEXTO se muestra en el TextView, pero cuando quiero pasar la referencia a esa fila particular de la tabla a alguna otra función, quiero pasar el ID como argumento/manejar. Por lo tanto, la ID se ocultará y se asociará con TextView. ¿Cómo puedo hacerlo? Si no es posible, ¿puede sugerir alguna alternativa para lograr esto? Por cierto, el TextView está incrustado dentro de un ListView.

código de adaptador:

cursor = db.rawQuery("SELECT * FROM EmpTable", null); 

adapter = new SimpleCursorAdapter(
       this, 
       R.layout.item_row, 
       cursor, 
       new String[] {"Emp_Name"}, 
       new int[] {R.id.txtEmployee}); 

Respuesta

35

Trate setTag(int, Object) y getTag(int). Incluso hay versiones que no aceptan una clave, si solo desea almacenar un valor. De los documentos:

Establece la etiqueta asociada con esta vista . Una etiqueta se puede usar para marcar una vista en su jerarquía y no tiene que ser ser única dentro de la jerarquía. Las etiquetas también se pueden usar para almacenar datos dentro de una vista sin recurrir a otra estructura de datos .

Así que usted puede hacer:

textView.setTag(myValue); 

y recuperarlo más tarde con:

myValue = textView.getTag(); 

Desde la interfaz utiliza Object, tendrá que añadir los moldes. Por ejemplo, si su valor es un int:

textView.setTag(Integer.valueOf(myInt)); 

y:

myInt = (Integer) textView.getTag(); 

Editar - subclase y añadir la etiqueta, utilice:

adapter = new SimpleCursorAdapter(this, R.layout.item_row, 
     cursor, new String[] {"Emp_Name"}, new int[] R.id.txtEmployee}) { 
    @Override 
    public View getView (int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     view.setTag(someValue); 
     return view; 
    } 
}; 
+0

Esto se ve bien. Sin embargo, todavía estoy atascado, ya que no estoy seguro de si esto se puede utilizar con un adaptador de lista? ¿Sabes dónde usamos un cursor y un adaptador para rellenar un ListView proporcionando el id de recurso de textView como nuevo int [] {R.id.txtEmployee}? ¿De qué manera puedo configurar la etiqueta para la vista de texto que devuelve el cursor antes de configurar el adaptador para ListView? – redGREENblue

+0

¿Puedes publicar la línea que usas para crear tu adaptador? Desde allí puedo escribir el código de subclases que necesita para agregar la etiqueta. –

+2

Puede subclasificar el adaptador y anular 'getView' para establecer la etiqueta. –

6

Usted puede utilizar setTag() y getTag().

3

Una forma de hacer esto sería hacer que su ListAdapter infle un diseño en lugar de un TextView para cada elemento de la lista. Luego puede tener otros campos (invisibles) ocultos en el diseño.

el XML podría tener este aspecto:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView android:id="@+id/visible_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Visible text"/> 
    <TextView android:id="@+id/hidden_value" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="hidden value" 
    android:visibility="gone"/> 
</LinearLayout> 
+0

En retrospectiva, creo La respuesta de Ted es más adecuada para lo que necesita. El mío es más adecuado para la información que uno podría necesitar mostrar/ocultar dinámicamente en el tiempo de ejecución. – Cephron