2012-01-20 19 views
9

Ho un gridview in cui ci sono due elementi in ciascuno dei suoi elementi, il primo è un'immagine e il secondo è un titolo, il titolo è invisibile nel lancio dell'applicazione, ma ho un pulsante fuori dalla griglia che quando clicco su di esso, voglio cambiare la visibilità dei titoli degli oggetti per renderli visibili, il mio problema è che non riesco ad accedere a ciascun titolo di ciascun elemento nel vista a griglia. Quando imposto la visibilità dei titoli (TextView) nel metodo onClick del pulsante indipendente nella mia attività, cambia la visibilità SOLO per il PRIMO elemento nella visualizzazione griglia!come accedere a un elemento specifico di ogni elemento della vista griglia

Questo disegno rappresenta la mia interfaccia, in modo che i titoli sono invisibili in principio, ma quando clicco su "SetVisibilityButton", voglio impostare loro di Visible:

Image1 Image2  Image3 
    Title1 Title2  Title3 

    Image4 Image5  Image6 
    Title4 Title5  Title6 

    Image7 Image8  Image9 
    Title7 Title8  Title9 


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

ho impostato la vista della griglia nel mio OnCreate() attività:

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

Nella mia classe ImageAdapter, questo è il mio GetView() metodo:

  @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; 
     } 

per ottenere il titolo TextView dalla mia attività principale e impostare la sua visibilità, ho provato:

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

e provato:

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

e provato:

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

Ma tutte queste soluzioni di set la visibilità solo per il primo elemento nella vista griglia.

ho speso un sacco di tempo con questo problema, ma non ho ancora trovato una soluzione, qualcuno potrebbe aiutarmi a risolvere il problema si prega di grazie in anticipo

+1

è possibile pubblicare il tuo codice? – AD14

+0

ok, ho intenzione di modificare il mio post –

risposta

27

Questo è semplice:

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

Grazie per la tua risposta, non ho capito la prima riga del tuo codice ma ho provato con questo codice, ma non ha fatto nulla: –

+0

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

+0

Ottimo! Funziona ! Grazie mille, ma ho un'altra domanda: se ho due textview in ogni elemento della visualizzazione griglia, come posso precisare la vista testuale della strega che voglio aggiornare? perché qui: "gridChild.getChildAt (k) instance di TextView "identifica solo il tipo di visualizzazione (TextView), e non uno specifico TextView (se ne abbiamo più di uno) –

3

il modo giusto per ottenere la vista del listView per una posizione specifica è la prossima:

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