Атрибуты с логическим и целочисленным форматами работают нормально, но когда я пытаюсь указать ссылку на ресурс массива, приложение вылетает при запуске. Я определил целочисленный массив внутри файла ресурсов xml и пытаюсь использовать его в качестве атрибута для настраиваемого представления.
Я могу использовать ресурс массива для установки атрибута "entry" класса android Spinner без ошибок, поэтому, похоже, это проблема в моей реализации. Сообщения logcat, похоже, не содержат какой-либо конкретной информации о сбое, но я все еще ищу, поэтому я обновлю, если что-то найду.
И это сразу вызывает сбой приложения. Кроме того, если я буду ссылаться на ресурс цвета, а не на массив, приложение не выйдет из строя. Кто-нибудь знает, как решить эту проблему?
Эта проблема решена, это была ошибка в способе загрузки атрибутов в конструктор класса. Раньше я использовал метод getInt () для TypedArray, когда мне следовало использовать getResourceId () со справочным форматом. Michael 30.10.2011
Я просто собираюсь ответить на свой вопрос здесь, поскольку ваше сообщение появляется первым, если вы используете Google что-то вроде "настраиваемое представление XML-атрибута ссылки на массив", так что кто-то может найти это полезным.
Если вы хотите, чтобы ваше настраиваемое представление ссылалось на массив строк, вы можете использовать существующий в Android атрибут android:entries XML вместо создания полностью нового настраиваемого атрибута.
Затем сделайте это в своем настраиваемом конструкторе View:
public MyCustomView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyle, 0);
try
{
CharSequence[] entries = a.getTextArray(R.styleable.MyCustomView_android_entries);
if (entries != null)
{
//do something with the array if you want
}
}
finally
{
a.recycle();
}
}
И тогда вы должны иметь возможность ссылаться на массив строк через атрибут android:entries при добавлении пользовательского представления в файл макета XML. Пример:
предоставит вам res/drawable/a.png в качестве CharSequence вместо идентификатора ресурса.
Правильный способ синтаксического анализа массива ссылок таков:
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomView);
int arrayResourceId = typedArray.getResourceId(R.styleable.CustomView_CustomAttr, 0);
if (arrayResourceId != 0) {
final TypedArray resourceArray = getResources().obtainTypedArray(arrayResourceId);
for (int i = 0; i < resourceArray.length(); i++) {
final int resourceId = resourceArray.getResourceId(i, 0);
// do stuff with resourceId, such as getResources().getDrawable(resourceId)
}
resourceArray.recycle();
}
typedArray.recycle();
Ответ 3 · рейтинг 9 · LiuWenbin_NO.
Вопрос в том, чтобы получить целочисленный массив, в моем случае мне нужно прочитать цвета (int) из массива для моего пользовательского представления, определение styeable, как показано ниже: