2011-07-05 16 views
8

Używam widoku siatki, aby wyświetlić kalendarz miesiąca. Po dotknięciu daty w kalendarzu odpowiednia komórka zostanie podświetlona poprzez zmianę jej tła i tekstu Kolor. Wszystko działa jak zaklęcie z wyjątkiem faktu, że nie mogę usunąć zaznaczenia komórki, jeśli wybiorę nową datę.GridView: Wyświetl widok według pozycji

Po kliknięciu datę pamiętam pozycję, więc kiedy wybrałem nowy wiem gdzie kliknąłem poprzednio:

protected OnClickListener onClicThisMonthDate(final int position) 
{ 
    return new OnClickListener() { 

     @Override 
     public void onClick(View v) 
     { 
      if(prevDateSelected > -1) 
      { 
       //Get the view by the oldPosition 
       //Change its background and text color 
      } 
      prevDateSelected = position; 
      TextView casecal = (TextView) v.findViewById(R.id.case_cal); 
      casecal.setBackgroundColor(Color.rgb(93, 94, 94)); 
      casecal.setTextColor(Color.WHITE); 
     } 
    }; 
} 

Czy istnieje rozwiązanie, aby uzyskać widok przez jego pozycji? Jaki jest najskuteczniejszy sposób na wybranie komórki i odznaczenie wszystkich pozostałych? Uwaga: Przez "wybierz komórkę" mam na myśli podświetlić ją, zmieniając jej styl.

Odpowiedz

17

ViewGroup.getChildAt zwraca widok w określonej pozycji w grupie.

GridView.setSelection wybiera widok w miejscu i odznacza inne widoki.

+1

GridView.setSelection nie działa niestety w trybie dotyku. Uzyskaj dziecko Wygląda na ok, ale czy istnieje sposób na aktualizację tylko tego widoku, a nie całego widoku siatki? – grunk

+0

Wywołaj View.invalidate() (z wątku UI) lub View.postInvalidate() (z wątku innego niż UI), aby zaktualizować tylko jeden widok. – xevincent

Powiązane problemy