2011-11-21 25 views
6

tengo algunos recursos definidos, por ejemplo .:Conseguir acceso a los recursos de un ArrayAdapter en Android

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

... y tengo una ArrayAdapter se muestran los elementos a TextViews. Estoy tratando de acceder a los valores con código como:

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

... pero me da errores como "The getResources método() está definido para el tipo ContinuityAdapter". (ContinuityAdapter extiende ArrayAdapter)

¿Hay una buena forma de evitar esto?

Gracias

Este es un ejemplo:

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

El primer caso genere un error, y el segundo no lo hace pero no lo utiliza el valor del archivo XML tampoco. Aunque como dices puedo usar el valor R ... siempre que lo use de esa manera en todos lados. Simplemente no estoy seguro si esto se considera 'la mejor práctica'. Gracias

Respuesta

17

Necesita un objeto Context para llamar al método Context.getResources(). Por lo general, puede pasar un Contexto o su subclase (es decir, Actividad) a través del constructor de su adaptador personalizado.

igual:

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

y luego usar:

mContext.getResources()... 

Editar: Este parece ser el caso para evitar interruptor. Ver:

+0

Gracias. Lo había intentado y pensé que no funcionaba, pero ahora me doy cuenta de que estaba recibiendo otro error al hacer: 'switch (foo) { case activity.getResources(). GetInteger (R.integer.KEY_POSITION_ARM):' The caso declaración obviamente requiere una expresión constante, a pesar de que el recurso es constante. ¿Estoy atascado usando declaraciones if? – ARQuattr

+0

Necesito ver más código. En general, traté de evitar los casos de cambio o utilizo el ID de recurso directamente (es decir, el caso R.id.xyz). – user802421

+0

Edité la pregunta para incluir un mejor ejemplo de código. Gracias – ARQuattr

Cuestiones relacionadas