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()