Nicky Manali
Nicky Manali

Reputation: 386

how to make click listener for images in horizontal ScrollView

I m making an horizontal Scroll View to display images in Android app.But i dont know how to make click listener for each individual images.My code is

    private Integer images[] = {R.drawable.mba, R.drawable.lifestylemin, 
R.drawable.jee,R.drawable.comic,R.drawable.defence};
// private ReaderView mReader;
// ImageView imageGallery;
LinearLayout im1;
LinearLayout imageGallery;
LinearLayout imageGallery2;
ImageView imageView;
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {

    View view=inflater.inflate(R.layout.tab2, container, false);
    // init PlugPDF
    LinearLayout adcat=(LinearLayout)view.findViewById(R.id.adcat);
    adcat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(getActivity(),ebookSelection.class));
        }
    });

     imageGallery = (LinearLayout) view.findViewById(R.id.imageGallery);
    imageGallery2 = (LinearLayout) view.findViewById(R.id.imageGallery2);
    addImagesToThegallery();

 //edit code
    for(int i=0;i<images.length;i++){
    final ImageView imageView = (ImageView) getImageView(images[i]);
    imageView.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent i=new Intent(getActivity(),book.class);
        int id=imageView.getId();
        i.putExtra("id",id);
        startActivity(i);
    }
   });
   }
 ////
    return view;
}
private void addImagesToThegallery() {

    for (Integer image : images) {
        imageGallery.addView(getImageView(image));
        imageGallery2.addView(getImageView(image));
    }
}


private View getImageView(Integer image) {
    ImageView imageView = new  
  ImageView(getActivity().getApplicationContext());
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(260, 400);
    lp.setMargins(0, 0, 10, 0);

    imageView.setLayoutParams(lp);
    imageView.setImageResource(image);
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    return imageView;
}

I want to make individua click listener for each image so that i can perform different tast from different images. Thanxx in advance.

Upvotes: 3

Views: 1694

Answers (4)

Daniel Andujar
Daniel Andujar

Reputation: 1192

You can also set the OnClickListener on your getImageView Method

EDIT: add a TAG on your imageView with the ImageResource, then recover the TAG on the image OnClick Method, Like This:

private View getImageView(Integer image, Integer index) {
    ImageView imageView = new
            ImageView(this.getApplicationContext());
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(260, 400);
    lp.setMargins(0, 0, 10, 0);

    imageView.setLayoutParams(lp);
    imageView.setImageResource(image);
    //Create a TAG on your Strings Resources
    //"IMAGE_TAG" with any value
    imageView.setTag(R.string.IMAGE_TAG, image);
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    imageView.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            int image = (int)v.getTag(R.string.IMAGE_TAG);
            switch (image)
            {
                case R.drawable.mba:
                {
                    //action for your image
                } break;
                //and so on..

            }
        }
    });

    return imageView;
}

Upvotes: 3

Karen Forde
Karen Forde

Reputation: 1127

You'll want to call setOnClickListener on the ImageView for each image.

You could do this in your getImageView method and have different behaviour depending on which image index you've passed to the method, or you could call the following from your for loop.

ImageView imageView = (ImageView) getImageView(i); 
imageView.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
         // Perform action on click
     }
 });

Upvotes: 2

Rashed Doha
Rashed Doha

Reputation: 53

Try adding this inner class inside your Activity/Fragment

class ImageClickListener implements View.OnClickListener {

public void onClick(View v) {
    switch(v.getId()) {
        case images[0]:
            // handle click for first image
        break;
            //And so on and so forth
    }


}

Then simply set the click listener inside the loop for each ImageView

for (Integer image : images) {
    ImageView image1 = getImageView(image);
    ImageView image2 = getImageView(image);
    image1.setOnClickListener(new ImageClickListener());
    image2.setOnClickListener(new ImageClickListener());
    imageGallery.addView(image1);
    imageGallery2.addView(image2);
}

Upvotes: 1

user4865748
user4865748

Reputation:

You can either set the onClick listener for each view inside the for loop or simply use the view.getId method inside the listener you already created and act accordingly.

Upvotes: 1

Related Questions