问题
我在ImageViews
类中通过android中的代码创建了一些onCreate()
该类实现了view.onclick()..
ImageView
没有注册它已被点击。这就是问题所在
我应该使用setTag(1)
代替,我如何在onClick()
中使用代码? :
a1 = new ImageView(this);
a1.setImageResource(R.drawable.examplepicture);
a1.setId(1);
public void onClick(View v) {
switch (v.getId()) {
case (1):
Toast.makeText(ScrollView1.this, "id200", Toast.LENGTH_LONG).show();
break;
}
}`
答案 0 :(得分:3)
你需要这样的东西
a1.setOnClickListener(new View.OnClickListener({
public void onClick(View v) {
switch (v.getId()) {
case (1):
Toast.makeText(ScrollView1.this, "id200", Toast.LENGTH_LONG).show();
break;
}
}
}));
来自评论的更新
您应该将所有图像视图存储在列表(或数组)中,实现onClickListener(而不是将其用作匿名内部类)并将它们添加到for循环中,如下所示。
class MyOnClickListener implements View.OnClickListener{
public void onClick(View v) {
// do something with your View v for example ((ImageView)v.setImageBitmap(yourImage)
switch (v.getId()) {
case (1):
Toast.makeText(ScrollView1.this, "id200", Toast.LENGTH_LONG).show();
break;
}
}
}
MyOnClickListener listener = new MyOnClickListener();
// cycle through adding listener to yuor view
for(ImageView view : imageViews) {
view.setOnClickListener(listener)
}
如果你想在视图上执行一个特定的函数,你将它作为参数传递,因此可以执行任何操作。
// do something with your View v passed as onClick param, for example ((ImageView)v.setImageBitmap(yourImage)
评论更新。
提问者建议的代码:
ArrayList<ImageView> imageViews = new ArrayList<ImageView>();
imageViews.add(IM1); // add others ...
for(ImageView imgView : imageViews){
IM1.setOnClickListener(this);
}
public void onClick(View v){
if((ImageView)v == IM1) { // do something }
}
这应该可行,但你想要做的是将OnClickListener
定义为一个单独的类(可能是一个内部类)。您的ImageView应该在一个单独的类中定义和设置(可能在活动中),然后您应该通过从活动中调用OnClickListener
来添加setOnClickListener
(如上面的答案中所述)。你正在做的是混淆你的听众和它正在聆听的对象,这些对象不是面向对象的,而且通常是很差的练习。
答案 1 :(得分:0)
如果你有活动工具OnClickListener
,你应该可以这样做。
a1 = new ImageView(this);
a1.setImageResource(R.drawable.examplepicture);
a1.setOnClickListener( this );
但是,我个人会避免让活动实施OnClickListener
。相反,我会这样做。
private OnClickListener a1Listener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
a1 = new ImageView(this);
a1.setImageResource(R.drawable.examplepicture);
a1.setOnClickListener( a1Listener );
}