studio strings recursos getresources getidentifier android arrays

strings - string.format android



Android: ¿Cómo accede a una cadena de cadenas desde strings.xml en una clase personalizada? (3)

Me gustaría obtener mi cadena de cadenas sin extender la Actividad en mi clase personalizada. ¿Hay alguna forma de hacer esto?

String[] foo_array = getResources().getStringArray(R.array.foo_array); no funcionará sin extender la actividad, por lo que necesito una solución alternativa.


Necesita pasar el contexto de la actividad a la clase personalizada.

private Context context; public CustomClass(Context context) { this.context=context; }


Pase el contexto al constructor de la clase personalizada y use el mismo

new CustomClass(ActivityName.this);

Entonces

Context mContext; public CustomClass(Context context) { mContext = context; }

usa el contexto

String[] foo_array = mContext.getResources().getStringArray(R.array.foo_array);

También tener en cuenta

No mantenga las referencias duraderas a una actividad de contexto (una referencia a una actividad debe tener el mismo ciclo de vida que la actividad en sí)

http://android-developers.blogspot.in/2009/01/avoiding-memory-leaks.html

Tambien revisa esto

getResources () de Android de una clase que no es de actividad

Editar:

Cambia esto

public class CustomClass(Context context) { }

A

public class CustomClass { Context mContext; public CustomClass(Context context) // constructor { mContext = context; } }


prueba esto,

Context context=getApplicationContext(); String[] foo_array = context.getResources().getStringArray(R.array.foo_array);

Y, no use el Contexto de Actividad ya que está vinculado al ciclo de vida de la Actividad.

Actualizar ,

getApplicationContext() es de la clase de contexto. Eso significa que cualquier cosa contextualizada tiene este método. Esto también significa que podrá usar esto desde el service o desde otros recursos.

Pero, si la clase personalizada no extiende Activity / context, tiene que pasar Context como parámetro para usar getApplicationContext()

si declaras tu actividad asi

myMethod(Activity activity) //this is bad

Bud si es como seguir,

myMethod(Context context) //this is ok

pero a partir de la declaración anterior no pase la Activity o el Context Service ya que tienen su propio ciclo de vida. en su lugar, utilizará getApplicationContext()