2011-02-15 12 views
11

Estoy creando una tabla en la que cada fila contiene texto y un botón. Ahora cuando se presiona ese botón, quiero llamar a un evento que usa el valor del texto al lado del botón. ¿Cómo puedo acceder al contenido de ese TextView? Puedo obtener el ViewParent de mi botón, que debería ser la fila, pero no hay un método para acceder a esa vista.Obtener otro hijo que comparta el padre con la vista actual

private OnClickListener updateButtonListener = new OnClickListener(){ 
    public void onClick(View v) { 
     ViewParent parent = v.getParent(); 
     //Here I would like to get the first child of that ViewParent 
     } 
}; 

Respuesta

53

Si usted puede conseguir un ViewParent, a continuación, puede convertirlo a ViewGroup y obtener el View que necesita. Su código se verá así:

TextView textView = null; 
ViewGroup row = (ViewGroup) v.getParent(); 
for (int itemPos = 0; itemPos < row.getChildCount(); itemPos++) { 
    View view = row.getChildAt(itemPos); 
    if (view instanceof TextView) { 
     textView = (TextView) view; //Found it! 
     break; 
    } 
} 

Eso es, asumiendo que tiene un solo TextView en su fila.

+0

Gracias, que funcionaba perfectamente – Lars

+0

@Malcolm excelente respuesta. Pero si hay más de un textView, entonces cómo seleccionar un textView en particular. – MDMalik

+1

@MDMalik Al usar identificadores o etiquetas. Debe usar etiquetas diferentes para las vistas de texto en el mismo grupo de vista, y cuando encuentre una vista de texto, obtendrá su etiqueta y verá si esta es la vista que necesita. – Malcolm

10

Si conoces ID de un elemento secundario, entonces puede hacer a continuación:

ViewGroup row = (ViewGroup) v.getParent(); 
TextView textView = (TextView) row.findViewById(R.id.childID); 
+2

no puede 'findViewById' de un' ViewGroup' –

+0

@MosesAprico Puedo hacer exactamente lo que sugiere esta respuesta. A menos que haya entendido mal algo. Explique a qué se refiere con "no puede encontrar ViewById de un grupo de visualización" –

+0

@IrvinH. Lo siento, él está en lo cierto. Estaba equivocado y algo claramente incomprendido en aquel entonces. –

Cuestiones relacionadas