2011-11-21 8 views
6

Ho alcune risorse definite, ad es .:Ottenere l'accesso alle risorse da un ArrayAdapter in Android

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

... e ho un ArrayAdapter la visualizzazione di elementi a TextViews. Sto cercando di accedere ai valori con un codice simile:

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

... ma ricevo errori come "Il metodo getResources() non è definito per il tipo ContinuityAdapter". (ContinuityAdapter estende ArrayAdapter)

C'è un buon modo per aggirare questo?

Grazie

Questo è un esempio:

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; 
} 

Il primo caso restituire un errore, e il secondo non lo fa, ma non usa il valore dal file XML sia. Anche se come dici tu posso semplicemente usare il valore R ... finché lo uso ovunque in quel modo. Non sono sicuro che sia considerata una "buona pratica". Grazie

risposta

17

È necessario un oggetto Context per chiamare il metodo Context.getResources(). Di solito puoi passare un Contesto o la sua sottoclasse (cioè Attività) attraverso il costruttore del tuo adattatore personalizzato.

come:

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

e quindi utilizzare:

mContext.getResources()... 

Edit: Questo sembra essere il caso per evitare l'interruttore. Vedere:

+0

Grazie. L'ho provato e ho pensato che non funzionasse, ma ora mi rendo conto che stavo facendo un altro errore: 'switch (foo) { case activity.getResources(). GetInteger (R.integer.KEY_POSITION_ARM):' The la dichiarazione di un caso richiede ovviamente un'espressione costante, anche se la risorsa è costante. Sono bloccato usando le istruzioni if? – ARQuattr

+0

Ho bisogno di vedere più codice. Generalmente ho cercato di evitare casi di switch o utilizzo direttamente l'ID risorsa (vale a dire il caso R.id.xyz). – user802421

+0

Ho modificato la domanda per includere un esempio di codice migliore. Grazie – ARQuattr

Problemi correlati