我正在制作水平滚动视图以在Android应用中显示图像。但我不知道如何为每个单独的图像制作点击监听器。我的代码是
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;
}
我想为每个图像制作单独的点击监听器,以便我可以从不同的图像执行不同的尝试。 提前完成。
答案 0 :(得分:3)
您还可以在getImageView方法
上设置OnClickListener编辑:使用ImageResource在imageView上添加TAG,然后在图像OnClick方法上恢复TAG,像这样:
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;
}
答案 1 :(得分:2)
您希望在ImageView上为每个图像调用setOnClickListener。
您可以在getImageView方法中执行此操作,并根据您传递给方法的图像索引具有不同的行为,或者您可以从for循环中调用以下内容。
ImageView imageView = (ImageView) getImageView(i);
imageView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
答案 2 :(得分:1)
您可以为for循环中的每个视图设置onClick侦听器,或者只是在您已创建的侦听器中使用view.getId方法并相应地执行操作。
答案 3 :(得分:1)
尝试在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
}
}
然后只需在每个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);
}