То, что вы пытаетесь сделать, не поддерживается.
Скорее всего, у вас есть код, который выглядит следующим образом:
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.array.numbers, android.R.layout.simple_spinner_item);
Что, конечно, вызывает следующее:
/**
* Creates a new ArrayAdapter from external resources. The content of the array
* is obtained through {@link android.content.res.Resources#getTextArray(int)}.
*
* @param context The application's environment.
* @param textArrayResId The identifier of the array to use as the data source.
* @param textViewResId The identifier of the layout used to create views.
*
* @return An ArrayAdapter<CharSequence>.
*/
public static ArrayAdapter<CharSequence> createFromResource(Context context,
int textArrayResId, int textViewResId) {
CharSequence[] strings = context.getResources().getTextArray(textArrayResId);
return new ArrayAdapter<CharSequence>(context, textViewResId, strings);
}
Вызов getTextArray
возвращает массив с нулевыми объектами, а не строковое представление значений в вашем целочисленном массиве. Копание глубже раскрывает источник проблемы в методе AssetManager
:
/**
* Retrieve the text array associated with a particular resource
* identifier.
* @param id Resource id of the string array
*/
/*package*/ final CharSequence[] getResourceTextArray(final int id) {
int[] rawInfoArray = getArrayStringInfo(id);
int rawInfoArrayLen = rawInfoArray.length;
final int infoArrayLen = rawInfoArrayLen / 2;
int block;
int index;
CharSequence[] retArray = new CharSequence[infoArrayLen];
for (int i = 0, j = 0; i < rawInfoArrayLen; i = i + 2, j++) {
block = rawInfoArray[i];
index = rawInfoArray[i + 1];
retArray[j] = index >= 0 ? mStringBlocks[block].get(index) : null;
}
return retArray;
}
В этом коде предполагается, что вы указали идентификатор ресурса для массива строк, и поэтому он не может правильно извлечь значения из массива целых чисел.