0

How can implement onClickListener in a loop of dynamically creating ImageView.
In the code below, I have declared an imageview as "final". Since the imageview is "final", imageView=new ImageView(CurrentActivity.this) is not possible in loop.

But if I removed the "final" keyword,

img_loader.DisplayImage(json_array.getJSONObject(j).getString("thumb_image"),imageView);

will show error as "Change imageView as final" .

My Code sniplet is here.

final ImageView imageView ;

for(int i=0;i<3;i++){ 

    json_array =jarray.getJSONObject(i).getJSONArray("images");
    final JSONArray json_ar=json_array;

   switch(i){
           case 0:                                                                  

                   imageView=new ImageView(CurrentActivity.this);                                                                        
                   img_loader.DisplayImage(json_array.getJSONObject(j).getString("thumb_image"),imageView);
                   imageView.setOnClickListener(new View.OnClickListener() {
                           @Override
                           public void onClick(View v) {
                            // Code here
                           }
                   });
                   break;

           case 1:
                   imageView=new ImageView(CurrentActivity.this);                                                                        
                   img_loader.DisplayImage(son_array.getJSONObject(j).getString("thumb_image"),imageView);
                   imageView.setOnClickListener(new View.OnClickListener() {
                           @Override
                           public void onClick(View v) {
                            // Code here
                           }
                   });
                   break;

           case 2:
                   imageView=new ImageView(CurrentActivity.this);                                                                        
                   img_loader.DisplayImage(son_array.getJSONObject(j).getString("thumb_image"),imageView);
                   imageView.setOnClickListener(new View.OnClickListener() {
                           @Override
                           public void onClick(View v) {
                            // Code here
                           }
                   });
                   break;
     }  
}

Please help , if anybody have an idea.

Blo
  • 11,903
  • 5
  • 45
  • 99
Eldho NewAge
  • 1,313
  • 3
  • 13
  • 17

1 Answers1

0

You can declare a final imageView instance within each case statement, as long as you create a statement block to hold the logic of each case:

for(int i=0;i<3;i++){ 

    json_array =jarray.getJSONObject(i).getJSONArray("images");
    final JSONArray json_ar=json_array;

   switch(i){
           case 0: {                                               

                   final ImageView imageView=new ImageView(CurrentActivity.this);                                                                        
                   img_loader.DisplayImage(json_array.getJSONObject(j).getString("thumb_image"),imageView);
                   imageView.setOnClickListener(new View.OnClickListener() {
                           @Override
                           public void onClick(View v) {
                            // Code here
                           }
                   });
                   break;
           }
           case 1: {
                   final ImageView imageView=new ImageView(CurrentActivity.this);                                                                        
                   img_loader.DisplayImage(son_array.getJSONObject(j).getString("thumb_image"),imageView);
                   imageView.setOnClickListener(new View.OnClickListener() {
                           @Override
                           public void onClick(View v) {
                            // Code here
                           }
                   });
                   break;
           }
           case 2: {
                   final ImageView imageView=new ImageView(CurrentActivity.this);                                                                        
                   img_loader.DisplayImage(son_array.getJSONObject(j).getString("thumb_image"),imageView);
                   imageView.setOnClickListener(new View.OnClickListener() {
                           @Override
                           public void onClick(View v) {
                            // Code here
                           }
                   });
                   break;
           }
     }  
}
cybersam
  • 63,203
  • 6
  • 53
  • 76