tejas
tejas

Reputation: 2445

Changing image view background dynamically

I have a a set of 10 imageviews in my layout. I have given them sequential id's also as

android:id="@+id/pb1"

android:id="@+id/pb2"

Now I want to change background dynamically.

    int totalPoi = listOfPOI.size();
    int currentPoi = (j/totalPoi)*10;
    for (i=1;i<=currentPoi;i++) {
          imageview.setBackgroundResource(R.drawable.progressgreen);
}

Now inside the for loop I want to set the image view background dynamically. i,e if the currentpoi value is 3, background of 3 image views should be changed. What ever the times the for loop iterates that many image view's background should be changed. Hope the question is clear now.

Note : I have only 1 image progressgreen that need to be set to 10 image views

Upvotes: 4

Views: 44569

Answers (6)

Hiral Vadodaria
Hiral Vadodaria

Reputation: 19250

Create an ImageView array:

ImageView views[] = new ImageView[10];
views[0] = (ImageView)findViewById(R.id.pb1);
...
views[9] = (ImageView)findViewById(R.id.pb10);

Now iterate the loop to set the background of images like this:

for (i=1;i<=currentPoi;i++) 
{
    views[i-1].setBackgroundResource(R.drawable.progressgreen);
}

Upvotes: 3

tejas
tejas

Reputation: 2445

Finally I did this in the following way,

I placed all the id's in the array as

int[] imageViews = {R.id.pb1, R.id.pb2,R.id.pb3,R.id.pb4,R.id.pb5,R.id.pb6,R.id.pb7,R.id.pb8,R.id.pb9,R.id.pb10};

Now:

int pindex = 0;

for (pindex; pindex <currentPoi; pindex++) {

    ImageView img = (ImageView) findViewById(imageViews[pindex]) ;
    img.setImageResource(R.drawable.progressgreen);
}

Now, I am able to change the images dynamically.

@goto10. Thanks for your help. I will debug your point to see what went wrong in my side

Upvotes: 7

goto10
goto10

Reputation: 4370

You'll need to give your ImageViews sequential ids, such as "@+id/pb1" and "@+id/pb2", etc.. Then you can get each of them in the loop like this:

for (i=1;i<=currentPoi;i++) {
    // Find the image view based on it's name. We know it's pbx where 'x' is a number
    // so we concatenate "pb" with the value of i in our loop to get the name
    // of the identifier we're looking for. getResources.getIdentifier() is able to use
    // this string value to find the ID of the imageView
    int imageViewId = getResources().getIdentifier("pb" + i, "id", "com.your.package.name");

    // Use the ID retrieved in the previous line to look up the ImageView object
    ImageView imageView = (ImageView) findViewById(imageViewId);

    // Set the background for the ImageView
    imageView.setBackgroundResource(R.drawable.progressgreen);
}

Replace com.your.package.name with your application's package.

Upvotes: 1

Permita
Permita

Reputation: 5493

you can do this by setting the name of drawables something like: img_1, img_2, img_3...

for (i=1;i<=currentPoi;i++)
{
ImageView imageview=(ImageView) findViewById(getResources().getIdentifier("imgView_"+i, "id", getPackageName()));
imageview.setImageResource(getResources().getIdentifier("img_"+i, "drawable",  getPackageName()));
}

Upvotes: 2

ImR
ImR

Reputation: 887

You could make an array of your ImageViews and then change them in your for loop.

ImageView views[] = new ImageView[10];
views[0] = (ImageView)findViewById(R.id.imageView0);
...
views[9] = (ImageView)findViewById(R.id.imageView9);

and then change your for loop to:

for (i=1;i<=currentPoi;i++) {
   views[currentPoi].setBackgroundResource(R.drawable.progressgreen);
}

Arrays start at index 0, so make sure there's not an off-by-one error in here.

Upvotes: 1

Mitesh Jain
Mitesh Jain

Reputation: 673

Try this code..... Create image Array..

private Integer[] mThumbIds = { R.drawable.bg_img_1, R.drawable.bg_img_2,
        R.drawable.bg_img_3, R.drawable.bg_img_4, R.drawable.bg_img_5 };

And than modify your code

int totalPoi = listOfPOI.size();
int currentPoi = (j/totalPoi)*10;
for (i=1;i<=currentPoi;i++) {
      imageview.setBackgroundResource(mThumbIds[i]);}

Upvotes: 1

Related Questions