Android: Как вы получаете доступ к строковому массиву из strings.xml в пользовательском классе?

Я хотел бы получить свой массив строк без расширения Activity в моем пользовательском классе. Есть ли способ сделать это?

String[] foo_array = getResources().getStringArray(R.array.foo_array); не будет работать без расширения Activity, поэтому мне нужен обход.

Ответы

Ответ 1

Передайте контекст конструктору пользовательского класса и используйте тот же

new CustomClass(ActivityName.this);

Тогда

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

используйте контекст

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

Также имейте в виду

Не сохраняйте долговечные ссылки на контекст-активность (ссылка на активность должна иметь тот же жизненный цикл, что и сама деятельность)

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

Также проверьте это

android getResources() из класса без активности

Edit:

Измените это

public class CustomClass(Context context) 
{
}

Для

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

Ответ 2

попробуйте это,

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

И не используйте контекст активности, связанный с жизненным циклом активности.

Обновление

getApplicationContext() - это класс Context. Это означает, что в любом случае расширенный контекст имеет этот метод. Это также означает, что вы сможете использовать это из service или из других ресурсов.

Но, если пользовательский класс не расширяет Activity/context, вам необходимо передать Context как параметр для использования getApplicationContext()

если вы заявляете свою активность следующим образом

myMethod(Activity activity) //this is bad

Бад, если он похож на следующий,

myMethod(Context context) //this is ok

но из объявления выше не проходят Activity или service Context, поскольку у них есть собственный жизненный цикл. вместо этого вы будете использовать getApplicationContext()

Ответ 3

Вам нужно передать контекст Activity в пользовательский класс.

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