2010-10-07 8 views
6

Mam klasaAndroida - getResources() i statyczne

public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener 

z tym próby wywołania metody z innej klasy. Ta metoda zawiera:

mFoo.setTextColor(getResources().getColor(R.color.orange)) 

Ale to nie działa. Mówi mi, że getResources nie jest statyczny ... jak mogę to zmienić?

Odpowiedz

13
Ale to nie działa, mówi mi, getResources isnt static ... jak mogę zmienić?

Oznacza to, że próbujesz wywołać getResources() z metody statycznej, zamiast zwykłej (instancji) metody. Najłatwiej to zrobić w przypadku, jeśli mFoo jest to TextView lub inny widżet, jest wywołanie getResources() na Context dostępnej z widgetem:

mFoo.setTextColor(mFoo.getContext().getResources().getColor(R.color.orange)); 

Jednakże fakt, że starają się odwoływać widget o nazwie mFoo ze statycznej metody przeraża mnie. To tylko pytanie o wyciek pamięci. Myślę, że naprawdę musisz ponownie rozważyć wykorzystanie statycznych elementów danych i metod.

+0

Dzięki. Mój problem z początkiem polegał na tym, że chcę wywołać metodę należącą do myClass z Preferencji Klasy. Kiedy więc zmieniła się preferencja, musi wywołać metodę z "zagranicznej" klasy, może mógłbyś dać mi wskazówkę, jak to rozwiązać ?! – Christoph

+0

@Christoph: Nie chcesz próbować aktualizować widżetów o innej aktywności z "PreferenceActivity". Czy twoja inna aktywność rejestruje zmiany preferencji za pomocą 'registerOnSharedPreferenceChangeListener()'. Po zmianie preferencji aktywność jest powiadamiana i może wprowadzać poprawki. – CommonsWare

+0

OK, to jest to, co zrobiłem wcześniej, ale jest sposób, aby zminimalizować kod w mojej "innej działalności", pozyskując ChangeListener. – Christoph