在java中创建的imageview的onclick,而不是xml

时间:2012-01-10 16:35:53

标签: android onclick imageview

问题 我在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;
    }
}`

2 个答案:

答案 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 );
}