如何将 onClickListener 分别添加到每个 ImageView?

How can I add onClickListener to each ImageView separately?

我以编程方式在 Android 中添加了线性布局,并向其中添加了 ImageView。我使用了以下代码。

LinearLayout layout = (LinearLayout)findViewById(R.id.linear1);     
for(int i=0;i<4;i++)
{
    imagev = new ImageView(this);
    imagev.setLayoutParams(new android.view.ViewGroup.LayoutParams(300,150));
    imagev.setMaxHeight(600);
    imagev.setMaxWidth(600);
    layout.addView(imagev);
}

你可以这样做:

myClickListener1 = new View.OnClickListener ...
myClickListener2 ...
myClickListener3 ...
myClickListener4 ...

for(int i=0;i<4;i++)
{
    imagev = new ImageView(this);
    imagev.setLayoutParams(new android.view.ViewGroup.LayoutParams(300,150));
    imagev.setMaxHeight(600);
    imagev.setMaxWidth(600);
    switch(i){
            case 0: imagev.setOnClickListener(myClickListener1);
            break;
            case 1: ...
            ...
    }
    layout.addView(imagev);
}

如果我要实现这个,我会给每个图像视图一个特定的标签,然后为每个图像视图设置相同的 onClickListener。然后在 onClickListener 中,我会检查被点击的图像视图的标签,并根据被点击的图像视图执行操作。

    LinearLayout layout = (LinearLayout)findViewById(R.id.linear1);     
    for(int i=0;i<4;i++)
    {
        imagev = new ImageView(this);
        imagev.setLayoutParams(new android.view.ViewGroup.LayoutParams(300,150));
        imagev.setMaxHeight(600);
        imagev.setMaxWidth(600);
        imagev.setTag(i);
        imagev.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 switch(Integer.valueOf(v.getTag())) {
                      case 0: ...
                              break;
                      case 1: ...
                              break;
                 }
            } 
        layout.addView(imagev);
    }

这将避免必须有 4 个不同的 onClickListener,并为您提供一些更清晰的代码。