trying to use ArrayList to hold image resources

℡╲_俬逩灬. 提交于 2019-12-25 01:14:05

问题


In my app, I have a bunch of images in my drawable folder which I select at random and display using imageView. I've been told about ArrayList's which can add/remove objects from the list...in order to prevent image repeats, some sample code I used below:

// 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 reports that image.setImageResource cannot use an object argument, which is what is provided by arrayList. The actual argument should be int. Any clue how to get around this??

Thanks in advance!


回答1:


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




回答2:


ArrayList contains Objects, always, never primitive types. When you set ints into it, they are autoboxed to Integer objects, when you get them back, you get Integer objects as well. A short fix will be:

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

Be careful though, unboxing a null pointer will cause a NullPointerException, So make sure your randInt is in the range of the arraylist.

EDIT:

I totally missed that, but You initialize your ArrayList like that:

ArrayList imageHolder = new ArrayList(); 

Which creates ArrayList of Objects. instead, initialize the ArrayList like the following to create ArrayList of integers:

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


来源:https://stackoverflow.com/questions/5844865/trying-to-use-arraylist-to-hold-image-resources

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!