Reputation: 386
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
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
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
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
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