2012-01-20 28 views
9

Mam gridview, w którym są dwa elementy w każdym z jego elementów, pierwszy to obraz, a drugi to tytuł, tytuł jest niewidoczny podczas uruchamiania aplikacji, ale mam przycisk poza widokiem siatki, który po kliknięciu powoduje zmianę widoczności tytułów pozycji, aby stały się widoczne, moim problemem jest to, że nie mogę uzyskać dostępu do każdego tytułu każdego elementu w widok siatki. Kiedy ustawiam widoczność tytułów (TextView) w metodzie onClick niezależnego przycisku w mojej aktywności, zmienia ona widoczność TYLKO dla PIERWSZEGO elementu w widoku siatki!jak uzyskać dostęp do określonego elementu każdego elementu widoku siatki

Ten szkic reprezentować mój interfejs, więc tytuły są niewidoczne na początku, ale po kliknięciu na „SetVisibilityButton”, chcę, aby ustawić je Widoczny:

Image1 Image2  Image3 
    Title1 Title2  Title3 

    Image4 Image5  Image6 
    Title4 Title5  Title6 

    Image7 Image8  Image9 
    Title7 Title8  Title9 


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

ustawić widok siatki w moim OnCreate() aktywność:

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

W mojej klasie ImageAdapter, to moja getView() metoda:

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

Aby uzyskać tytuł TextView z moim głównym działalności i ustawić jego widoczność, próbowałem:

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

i próbowałem:

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

i próbowałem:

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

Ale ustawić wszystkie te rozwiązania widoczność tylko pierwszego elementu w widoku siatki.

Spędziłem dużo czasu z tym problemu, ale ja jeszcze nie znalazł rozwiązanie, czy ktoś może mi pomóc to naprawić proszę góry dziękuję

+1

można pisać kod? – AD14

+0

ok, zamierzam edytować mój wpis –

Odpowiedz

27

To proste:

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

Dzięki za odpowiedź ur, nie rozumiem pierwszej linii kodu, ale próbowałem z tym kodem, ale nic nie zrobił: –

+0

favorGrid = (GridView) findViewById (R.id .favorGrid); favorGrid.setAdapter (adapter); ostateczny rozmiar int = favorGrid.getChildCount(); dla (int i = 0; i

+0

Świetnie! to działa ! Dziękuję bardzo, ale mam inne pytanie: jeśli mam dwa widoki tekstowe w każdym elemencie widoku siatki, w jaki sposób mogę precyzyjnie wyświetlić widok tekstowy czarownicy? ponieważ tutaj: "gridChild.getChildAt (k) instanceof TextView "identyfikujesz tylko typ widoku (TextView), a nie konkretny TextView (jeśli mamy więcej niż jeden) –

3

Właściwy sposób, aby uzyskać widok ListView dla konkretnego stanowiska jest następny:

View viewItem = list.getChildAt(position); 
if (viewItem != null) {     
    TextView text = (TextView) viewItem.findViewById(R.id.item); 
} 
Powiązane problemy