2012-01-26 11 views
6

En el método onCreate() de mi clase I crea una cuadrícula de botones, y darles etiquetas para identificarlos, por ejemplo:¿El botón Recuperar de findViewWithTag no funciona?

button.setTag("one four"); 

Esto está funcionando bien. Ahora quiero hacer un nuevo botón temporal dentro de un método, y estoy usando este código:

String s = "one four"; 
Object o = s; 
View view = new View(this); 
Button button = (Button)view.findViewWithTag(o); 

Pero botón siempre sale como "nulo". Y no sé por qué.

+0

Bueno, primero tiene que agregar un botón con esa etiqueta en su vista ... – Cata

Respuesta

8

Debe llamar antes view.addChild(button);view.findViewWithTag(o);

Y usted no necesita hacer esto Object o = s;, view.findViewWithTag(s); hará lo mismo.

View view = new View(this); - crea una nueva instancia de View. El objeto view no tiene hijos. Debe llamar al método findViewWithTag(s) desde el diseño que contiene su objeto Button.

+0

De esta manera: Button knop = view.addChild (Button) view.findViewWithTag (o); ? – Mavix

+0

no. button.setTag (s); view.addChild (botón); Botón de botón = (Botón) view.findViewWithTag (s); – Natali

+0

Cuando lo hago, aparece el error: El botón no se puede resolver en una variable. Y he importado tanto el botón como la vista. – Mavix

1

Trate de no asignar la cadena a la variable del objeto y establecer la etiqueta directamente para ser su cadena.

0

Mavix, findViewWithTag atraviesa todas las vistas secundarias y funciona bien en ViewGroup. Pruebe esto:

// after button.setTag("one four"); 

ViewGroup v = (ViewGroup) findViewById(R.id.myFirstLayoutIdInXmlLayoutFile); 
Button b = (Button) v.findViewWithTag("one four"); 
0

Tuve la misma duda. En mi situación, tengo un Diseño Principal y un Diseño Secundario (dentro del Principal) - los dos fueron RelativeLayout - y quiero obtener los componentes que agregué en la pantalla.

Pero tuve que usar teclas dinámicas (que podrían repetirse) y fueron el único parámetro que pude usar para identificar los componentes.

Como Natali, en su response, uso "TAG" en los componentes y funcionó para mí. Consulte a continuación (usando el botón como ejemplo):

Paso 1: Declare una variable de tipo botón. Button btn = new Button(this); // este es el contexto de mi actividad

Paso 2: Configure cualquier tecla. String any_key = "keyToGetButton";

Paso 3: Establezca la etiqueta (clave establecida en el paso 2) en su botón. btn.setTag(any_key);

Paso 4: Obtenga su botón por etiqueta (en otro método, por ejemplo). Button button = (Button) your_layout_where_is_button.findViewWithTag(any_key);

Cuestiones relacionadas