poniedziałek, 10 lutego 2014

Korzystanie z komponentów wizualnych w kodzie




Kod źródłowy do tej lekcji znajduje się tutaj. Rozpakuj go i zaimportuj. W katalogu z kodem źródłowym znajdą się podkatalogi oznaczone numerami. Są to po prostu kolejne wersje kodu, tworzonego w ramach przykładów. Możesz analizować kolejne kroki tworzenia aplikacji, lub od razu zabrać się za kod z katalogu o najwyższym numerku.


Umieszczanie komponentów na ekranach aplikacji odbywa się najczęściej poprzez ich przeciągnięcie na ekran (co tak naprawdę generuje kod XML w pliku layoutu) lub ręczne definiowanie ich w pliku layoutu. Poza tym, że figurują jako obiekty XML, nie ma do nich żadnego dowiązania w kodzie aktywności. Jeśli zechcemy w jakiś sposób z tych komponentów korzystać, musimy w klasie aktywności podpiąć do nich referencje.
Zaczynamy od przyklejenia na ekran jakichś przykładowych komponentów:


 
Gdy zajrzymy do pliku layoutu, zobaczymy że zostało wygenerowane trochę dodatkowego kodu związanego z tymi nowymi komponentami:


Przejdźmy teraz do kodu aktywności. Aby korzystać z przyklejonych komponentów, musimy przede wszystkim posiadać obiekty klas których są komponenty. Definiuję je więc w liniach 12 i 13. Mógłbym to zrobić równie dobrze w metodzie onCreate (wywoływanej przy uruchamianiu aktywności), ale taka globalna deklaracja sprawi, że będę miał do tych obiektów dostęp również w innych metodach. W liniach 19 i 20 podpinam do tych obiektów referencję do komponentów. Służy do tego metoda findViewById. Jako jej parametr podaję wskaźnik do zdefiniowanego komponentu. Zauważ że każdy kompontent określony w pliku layoutu ma parametr android:id. To właśnie on jednoznacznie identyfikuje dany komponent. Nasz guzik na ten przykład ma identyfikator „button1”. Chcąc więc podpiąć referencję do tego obiektu piszę w parametrze metody findViewById „R.id.” i po tym podaję identyfikator komponentu o który mi chodzi. Od tego momentu mogę ustawić czy czytać parametry podpiętych już komponentów wizualnych.




Po uruchomieniu wygląda to tak:



13 komentarzy:

  1. Przy definiowaniu komponentów w 12 i 13 linijce wywala mi błąd: "Button/TextView cannot be resolved to a type". Co robię źle?

    OdpowiedzUsuń
    Odpowiedzi
    1. W momencie najechania w Eclipsie na błąd powinna wyświetlić się lista problemów. Z podanych możliwości wybierz import 'TextView/Button'.

      Usuń
    2. Lub użyj skrótu klawiaturoweg Shift + Ctrl + O, który spowoduje automatyczne importowanie wymaganych... klas? W sumie to nie do końca wiem czego, ale zaimportuje ;)

      Usuń
    3. ok, dziękuję za rady :)

      Usuń
  2. Aplikacja wyłącza się: wyskakuje error:
    "FATAL EXCEPTION:main"

    OdpowiedzUsuń
    Odpowiedzi
    1. Mam dokładnie to samo. Czy ktoś może pomoc?

      Usuń
  3. Ja miałem problem gdy dodałem Button do res/layout/fragment_main.xml - aplikacja zatrzymana na urządzeniu
    Zrobiłem projekt od nowa i gdy dodałem button do res/layout/activity_main.xml działa

    OdpowiedzUsuń
  4. Ludzkim głosem?
    Ten "poradnik" to jakaś kpina, nawet nie napisał pan w jakim pliku mamy dodać kod aktywności.
    Kpina nie poradnik.

    OdpowiedzUsuń
    Odpowiedzi
    1. napisz lepszy pajacu a nie narzekaj. kup sobie ksiazke i sie ucz jak nie pasuje.

      Usuń
  5. Sam jesteś kpina jak takich rzeczy nie wiesz. Taka metoda jest tylko jedna w całym projekcie, trzeba było ja odszukac .

    OdpowiedzUsuń
  6. Korzystam z Android Studio i nie mogę znaleźć automatycznego importu potrzebnych klas. Może ktoś pomóc ??

    OdpowiedzUsuń