Gdy utworzymy w eclipse nowy projekt na androida, w głównej klasie zostanie wygenerowana metoda onCreate
, która będzie wyglądała podobnie do tego co poniżej:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } |
Niepokoić może odwołanie do obiektu R i wyświetlany na starcie błąd R cannot be resolve
. Kilka minut zajęło mi rozwiązanie tej zagadki, a więc teraz w kilka minut spróbuję napisać jej wyjaśnienie :)
Otóż, podczas budowania projektu, automatycznie w folderze gen/ tworzona jest klasa R, zawierające statyczne definicje wszystkich obiektów, które umieścimy w folderze res/
. Ponieważ dopiero co utworzyliśmy nowy projekt, więc klasa R nie została jeszcze wygenerowana i stąd na ekranie widzimy błąd. Wystarczy jednak zbudować projekt i po problemie.
Do czego służy ta klasa? Otóż dzięki niej, możemy odwoływać się do obiektów umieszczonych w folderze res/
. Dajmy na to, że do folderu res/drawable/
mamy wrzucony obrazek ball1.png
– wtedy w klasie R zostanie utworzony odpowiedni wpis:
public final class R { public static final class drawable { public static final int ball1=0x7f020000; } } |
Teraz, aby użyć gdzieś w kodzie nasz obrazek, wystarczy odwołać się do obiektu R.drawable.ball1
, np. w taki sposób:
ImageView i = new ImageView(this); i.setImageResource(R.drawable.ball1); |
No, to było takie wytłumaczenie totalnego laika dla laików :) Więcej o zasobach można poczytać pod adresem http://developer.android.com/guide/topics/resources/index.html oraz w dokumentacji http://developer.android.com/reference/android/content/res/package-summary.html.