2016-04-16 4 views
0

я следующие объявлен в верхней части моего класса:Инициализировать массив строк из ресурса строк массива

private String[] mapTypes = new String[]{"Normal", "Satellite", "Satellite with streets", "Terrain"}; 

Я также следующий ресурс строкового массива, определенный:

<string-array 
    name="map_types"> 
     <item>Normal</item> 
     <item>Satellite</item> 
     <item>Satellite with streets</item> 
     <item>Terrain</item> 
</string-array> 

Я хотел бы инициализировать массив из ресурса string-array в верхней части класса. например, сделать следующее: объявить переменную:

private String[] mapTypeNames = getResources().getStringArray(R.array.map_types); 

Любые идеи?

ответ

0

Если «класс» является чем-то, что наследуется от Context, вы можете иметь это поле в классе, но вы не можете его инициализировать до соответствующего жизненного цикла (например, onCreate() в действии). getResources() не будет работать до тех пор.

Если «класс» - это то, что не наследуется от Context, то, что вы хотите синтаксически, по умолчанию невозможно. И даже если вы реализуете свой собственный метод getResources(), это, в свою очередь, в конечном итоге нуждается в Context, и вы вернетесь к первому.

+0

То, что я думал. Я просто пытался избежать инициализации массива каждый раз при выполнении операции onCreate() и, в то же время, быть хорошим мальчиком и использовать ресурсы –

+0

@ChrisRead: «Я просто пытался избежать инициализации массива каждый раз, когда onCreate() выполняется "- вы ничего не спасли бы. 'onCreate()' выполняется только тогда, когда создается действие, которое будет вскоре после его создания. Так будет ваш инициализатор поля. – CommonsWare

Смежные вопросы