2012-01-20 15 views
9

Tengo una vista de cuadrícula en la que hay dos elementos en cada uno de sus elementos, el primero es una imagen y el segundo es un título, el título es invisible en el lanzamiento de la aplicación, pero tengo un botón fuera de la vista de cuadrícula que cuando hago clic en él, quiero cambiar la visibilidad de los títulos de los elementos para que se vuelvan visibles, mi problema es que no puedo acceder a cada título de cada elemento en el vista en cuadrícula. Cuando establezco la visibilidad de los títulos (TextView) en el método onClick del botón independiente en mi actividad, ¡cambia la visibilidad SOLAMENTE para el primer elemento en la vista de cuadrícula!cómo acceder a un elemento específico de cada elemento de vista de cuadrícula

Este bosquejo representa mi interfaz, por lo que los títulos son invisibles al principio, pero cuando hago clic en "SetVisibilityButton", quiero ponerlos en Visible:

Image1 Image2  Image3 
    Title1 Title2  Title3 

    Image4 Image5  Image6 
    Title4 Title5  Title6 

    Image7 Image8  Image9 
    Title7 Title8  Title9 


    ---------------------------- 
    SetVisibilityButton 
    ____________________________   

que establece la vista de cuadrícula en mi alcrear() actividad:

favorGrid = (GridView) findViewById(R.id.favorGrid); 
    favorGrid.setAdapter(adapter); 

En mi clase ImageAdapter, esta es mi getView() método:

  @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      View MyView = convertView; 

      /*we define the view that will display on the grid*/ 

      //Inflate the layout 
      LayoutInflater li = getLayoutInflater(); 
      MyView = li.inflate(R.layout.favor_item, null); 

      // Add The Text!!! 
      TextView tv = (TextView)MyView.findViewById(R.id.title); 
      tv.setText(mTitles[position]); 

      // Add The Image!!!   
      ImageView iv = (ImageView)MyView.findViewById(R.id.favor_item_image); 
      iv.setImageResource(mThumbIds[position]); 
      return MyView; 
     } 

Para obtener el TextView título de mi actividad y establecer su visibilidad, he intentado:

TextView title = (TextView) findViewById(R.id.title); 
    title.setVisibility(View.VISIBLE); 

y trató:

 // gv is the gridview (R.id.gridview) 
    TextView title = (TextView)gv.findViewById(R.id.title); 
    title.setVisibility(View.VISIBLE); 

y trató:

 LinearLayout layout = (LinearLayout) findViewById(R.id.gridLayout); 
     TextView title = (TextView)layout.findViewById(R.id.title); 
     title.setVisibility(View.VISIBLE); 

Pero puse todas estas soluciones la visibilidad solo del primer elemento en la vista de cuadrícula

Pasé mucho tiempo con este problema, pero que todavía no encontró una solución, ¿alguien me podría ayudar a repararlo por favor gracias de antemano

+1

se puede publicar su código? – AD14

+0

bien, voy a editar mi publicación –

Respuesta

27

Esto es simple:

GridView mGridView (Your object instance) 

final int size = mGridView.getChildCount(); 
for(int i = 0; i < size; i++) { 
    ViewGroup gridChild = (ViewGroup) mGridView.getChildAt(i); 
    int childSize = gridChild.getChildCount(); 
    for(int k = 0; k < childSize; k++) { 
    if(gridChild.getChildAt(k) instanceof TextView) { 
     gridChild.getChildAt(k).setVisibility(View.GONE); 
    } 
    } 
} 
+0

Gracias por su respuesta, no entendí la primera línea de su código, pero probé con este código, pero no hizo nada: –

+0

favorGrid = (GridView) findViewById (R.id .favorGrid); favorGrid.setAdapter (adaptador); final int size = favorGrid.getChildCount(); for (int i = 0; i

+0

¡Genial! funciona ! Muchas gracias, pero tengo otra pregunta: si tengo dos textview en cada elemento de la vista de cuadrícula, ¿cómo puedo precisar la vista de texto de bruja que quiero actualizar? porque aquí: "gridChild.getChildAt (k) instancia de TextView "identifica solo el tipo de la vista (TextView), y no un TextView específico (si tenemos más de uno) –

3

la forma correcta para obtener la vista de la vista de lista para una posición específica es la siguiente:

View viewItem = list.getChildAt(position); 
if (viewItem != null) {     
    TextView text = (TextView) viewItem.findViewById(R.id.item); 
} 
Cuestiones relacionadas