问题:我有一个有300-400图像视图的课程。该类实现了View.onClickListener。我可以将图像视图放在某种数组中吗? 图像视图设置类似于
ImageView IM1 = new ImageView(this);
IM1.setImageResource(R.drawable.have_fun);
我无法理解如何在课程的onclick中使用这些。我通常使用getId但是这些没有id因为它们不在xml中。
答案 0 :(得分:1)
ArrayList<ImageView> imageViews = new ArrayList<ImageView>();
imageViews.add(IM1);
// add others ...
for(ImageView imgView : imageViews){
IM1.setOnClickListener(this);
}
在onClick方法中,您可以将View v与ImageViews进行比较,以决定要做什么。
public void onClick(View v){
if((ImageView)v == IM1){
// do something
}
}
答案 1 :(得分:0)
例如,如果IM1是您的ImageView,那么:
IM1.setOnTouchListener(new View.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event){
/*your code here*/
return true;
}
});
或者,如果您只想处理onClick,那么
IM1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
/*your code here*/
}
});
区别在于,使用onTouch事件,您还可以处理“移动”和“拖动”操作。用手指在ImageView上调用onTouch。 onClick - 只有你点击一次。
或者您可以创建另一个实现OnClickListener接口的类,例如:
public class TouchController implements OnClickListener{
/*any code that you need*/
public void onClick(View v){
/*your code*/
}
}
然后
TouchController controller = new TouchController();
IM1.setOnClickListener(controller);
答案 2 :(得分:0)
您可以为视图使用标记。
为imageView
设置整数标记ImageView IM1 = new ImageView(this);
IM1.setImageResource(R.drawable.have_fun);
IM1.setTag(1);
并且在onClickListener中,您引用了单击的视图,您可以决定使用
单击哪个图像 int imageClicked = (int) clickedView.getTag();
比较imageClicked
以了解所点击的图片。
答案 3 :(得分:0)
创建图像时,您可以动态设置ID:
for (int i = 0; i < listImages.size(); i++) {
final ImageView image = listImages.get(i);
image.setImageResource(R.drawable.have_fun);
image.setId(i);
}
然后在你的onClick方法中你可以做到:
OnClickListener onClick = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
}
}
};