2011-11-21 14 views
6

Mam zdefiniowane pewne zasoby, np .:Uzyskiwanie dostępu do zasobów z ArrayAdapter w Androidzie

<color name="lightGrey">#FFCCCCCC</color> 
<integer name="KEY_POSITION_ARM">2</integer> 

... i mam ArrayAdapter Wyświetlanie elementów do TextView. Próbuję uzyskać dostęp do wartości z kodem jak:

keyPosition = getResources().getInteger(R.integer.KEY_POSITION_ARM); 
moduleDataView.setTextColor(getResources().getColor(R.color.darkgreen)); 

... ale pojawiają się błędy takie jak „The getResources() metoda jest zdefiniowana dla typu ContinuityAdapter”. (ContinuityAdapter rozszerza ArrayAdapter)

Czy jest to dobry sposób obejścia tego?

Dzięki

To jest przykład:

switch (currentModule.keyPosition) { 
case activity.getResources().getInteger(R.integer.KEY_POSITION_ARM): 
    moduleDataView.keyPosition.setText("TEST"); 
    moduleDataView.keyPosition.setTextColor(Color.GREEN); 
    break; 
case R.integer.KEY_POSITION_ARM: 
    moduleDataView.keyPosition.setText("ARM"); 
    moduleDataView.keyPosition.setTextColor(Color.RED); 
    break; 
} 

Pierwszy przypadek daje błąd, a drugi nie, ale nie używać wartości z pliku XML albo. Chociaż, jak mówisz, mogę po prostu użyć wartości R ..., o ile używam jej w ten sposób wszędzie. Po prostu nie jestem pewien, czy jest to uważane za "najlepszą praktykę". Dzięki

Odpowiedz

17

Potrzebujesz obiektu Context do wywołania metody Context.getResources(). Zwykle można przekazać kontekst lub jego podklasę (tj. Aktywność) za pośrednictwem konstruktora niestandardowej karty.

odczuwalna:

public ContinuityAdapter extends ArrayAdapter { 
    private final Context mContext; 
    ... 
    public ContinuityAdapter(Context context) { 
     mContext = context; 
    } 
} 

a następnie użyć:

mContext.getResources()... 

Edit: To wydaje się być w przypadku, aby uniknąć przełącznika. Zobacz:

+0

Dzięki. Próbowałem go i myślałem, że to nie działa, ale teraz zdaję sobie sprawę, że otrzymuję kolejny błąd: "switch (foo) { case activity.getResources(). GetInteger (R.integer.KEY_POSITION_ARM): 'The Oświadczenie sprawy oczywiście wymaga stałego wyrażenia, nawet jeśli zasób jest stały. Czy utknąłem przy użyciu instrukcji if? – ARQuattr

+0

Potrzebuję zobaczyć więcej kodu. Zasadniczo starałem się unikać przypadków przełączania lub bezpośrednio używam identyfikatora zasobu (to jest sprawy R.id.xyz). – user802421

+0

Edytowałem pytanie, aby dołączyć lepszy przykład kodu. Dzięki – ARQuattr

Powiązane problemy