пытаясь использовать ArrayList для хранения ресурсов изображения - PullRequest
0 голосов
/ 01 мая 2011

В моем приложении у меня есть куча изображений в моей папке для рисования, которую я выбираю случайным образом и отображаю, используя imageView.Мне рассказывали о ArrayList, который может добавлять / удалять объекты из списка ... , чтобы предотвратить повторение изображений , некоторые примеры кода, которые я использовал ниже:

// create an array list 
ArrayList imageHolder = new ArrayList(); 
int remaining = 10;

public void initArrayList(){
    // add elements to the array list 
    imageHolder.add((int)R.drawable.child0); 
    imageHolder.add((int)R.drawable.child1); 
    imageHolder.add((int)R.drawable.child2); 
    imageHolder.add((int)R.drawable.child3); 
    imageHolder.add((int)R.drawable.child4); 
    imageHolder.add((int)R.drawable.child5); 
    imageHolder.add((int)R.drawable.child6); 
    imageHolder.add((int)R.drawable.child7); 
    imageHolder.add((int)R.drawable.child8);
    imageHolder.add((int)R.drawable.child9); 
}

//get random number within the current range
int randInt = new Random().nextInt((remaining-1));

//update the imageView config    
ImageView image = (ImageView) findViewById(R.id.shuffleImageView);
image.setImageResource(imageHolder.get(randInt));

Отчеты Eclipseэтот image.setImageResource не может использовать объектный аргумент, который предоставляется arrayList.Фактический аргумент должен быть int.Любая подсказка, как обойти это ??

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Использование List<Integer> imageHolder = new ArrayList<Integer>();

0 голосов
/ 01 мая 2011

ArrayList содержит объекты, всегда, никогда не примитивные типы. Когда вы устанавливаете int s в них, они автоматически помещаются в Integer объекты, когда вы их возвращаете, вы также получаете объекты Integer. Краткое исправление будет:

image.setImageResource((int)imageHolder.get(randInt));

Будьте осторожны, распаковка нулевого указателя вызовет исключение NullPointerException, поэтому убедитесь, что ваш randInt находится в диапазоне массива.

EDIT:

Я полностью пропустил это, но Вы инициализируете свой ArrayList так:

ArrayList imageHolder = new ArrayList(); 

, который создает ArrayList объектов. вместо этого инициализируйте ArrayList, как показано ниже, чтобы создать ArrayList из целых чисел:

List<Integer> imageHolder = new ArrayList<Integer>(); 
...