Получение строкового ресурса проекта Android из Java-файла

Я определяю много своих постоянных строк в ресурсе R.strings для моего проекта Android. Тем не менее, я хотел бы использовать их только в Java-файл. Где класс просто класс Java. Есть ли способ получить эту ссылку?

Я могу ссылаться на него, но я не могу использовать Context.getString() метод, потому что это только файл Java.

Какие у меня варианты здесь? Должен ли я просто определить все мои постоянные строки в этом файле Java? Или я все еще могу использовать R.strings?


пример

getString(R.string.PLUS_SERVICE))

Это не работает, потому что у меня нет контекста.


Спасибо!

6 ответов

Решение

Это действительно зависит от того, что это за строки. Строковые константы слегка отличаются от строковых ресурсов. Обычно, если эти строки заканчиваются в тексте, обращенном к пользователю, вы, вероятно, захотите поместить их в строковые ресурсы. Таким образом, они могут быть легко локализованы. Если они предназначены для сообщений об исключениях и т. Д., То это не так уж важно, и они могут входить в константы.

Если вам нужно использовать ресурсы в классе без Contextнужно дать ему доступ к одному. Вы можете либо передать его в метод, который использует его в качестве аргумента, либо передать его конструктору при создании класса и сохранить его в члене.

Пытаться

Context context=getApplicationContext();
context.getString(R.string.PLUS_SERVICE);

Вы можете сделать одну вещь,

Делать Constructor в файле Java для accept Context as parameter лайк,

public ClassName(Context c)
{
}

И передать контекст из деятельности при создании объекта,

new ClassName(ActivityName.this);

И теперь вы можете использовать эту переменную контекста в вашем Java-файле.

Быть уверенным:

Context context=this;

Это на самом деле контекст Activity, а затем доступ к строковому ресурсу как:

String string = context.getApplicationContext().getString(R.string.string_name)

Попробуйте это например во фрагменте, используйте

getActivity().getApplicationContext().getString( R.string.resource )

Как говорили другие, ресурсы предназначены для пользовательского интерфейса. Если ваш класс, которому нужны эти строки, не имеет доступа к контексту, то они, вероятно, просто должны быть константами в этом классе. Если вам нужно принудительно установить Context в классе, вам может потребоваться переоценить ваш дизайн, потому что вы создаете функциональную библиотеку, а не OO-дизайн. Доступ к ресурсам и их использование должны естественным образом обеспечиваться хорошим OOD.

Другие вопросы по тегам