处理动态添加的ImageView的点击事件
Handling Click Event of ImageView which is dynamically added
代码:
maxIndex = alItemListDetails.size();
linItemTags = (LinearLayout) findViewById(R.id.linItemTags);
final ImageView image = new ImageView(this);
for (int i = 0; i < maxIndex; i++) {
image.setLayoutParams(new android.view.ViewGroup.LayoutParams(80, 60));
image.setMaxHeight(20);
image.setMaxWidth(20);
image.setTag(i);
image.setImageResource(R.drawable.box);
// Adds the view to the layout
linItemTags.addView(image);
}
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Common.displayToast(ItemDetailsActivity.this, "" + image.getTag());
}
});
从上面的代码可以看出,我动态生成了imageview,并试图处理那个Imageview的点击事件。
但是,它给我如下错误:
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Caused by: java.lang.IllegalStateException: The specified child
already has a parent. You must call removeView() on the child's parent
first.
因为在 linItemTags
布局中添加相同的 ImageView
对象 image
不止一次。
在 for 循环中创建 image
对象:
for (int i = 0; i < maxIndex; i++) {
ImageView image = new ImageView(this); //<< create here
....
linItemTags.addView(image);
}
try this
maxIndex = alItemListDetails.size();
linItemTags = (LinearLayout) findViewById(R.id.linItemTags);
for (int i = 0; i < maxIndex; i++) {
ImageView image = new ImageView(this);
image.setLayoutParams(new android.view.ViewGroup.LayoutParams(80, 60));
image.setMaxHeight(20);
image.setMaxWidth(20);
image.setTag(i);
image.setImageResource(R.drawable.box);
// Adds the view to the layout
linItemTags.addView(image);
image.setOnClickListener(new ImageClickLIstener(i));
}
class ImageClickLIstener implements OnClickListener
{
int position;
ImageClickLIstener()
{
this.position= position;
}
@Override
public void onClick(View v) {
Common.displayToast(ItemDetailsActivity.this, "" + position);
}
}
代码:
maxIndex = alItemListDetails.size();
linItemTags = (LinearLayout) findViewById(R.id.linItemTags);
final ImageView image = new ImageView(this);
for (int i = 0; i < maxIndex; i++) {
image.setLayoutParams(new android.view.ViewGroup.LayoutParams(80, 60));
image.setMaxHeight(20);
image.setMaxWidth(20);
image.setTag(i);
image.setImageResource(R.drawable.box);
// Adds the view to the layout
linItemTags.addView(image);
}
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Common.displayToast(ItemDetailsActivity.this, "" + image.getTag());
}
});
从上面的代码可以看出,我动态生成了imageview,并试图处理那个Imageview的点击事件。
但是,它给我如下错误:
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
因为在 linItemTags
布局中添加相同的 ImageView
对象 image
不止一次。
在 for 循环中创建 image
对象:
for (int i = 0; i < maxIndex; i++) {
ImageView image = new ImageView(this); //<< create here
....
linItemTags.addView(image);
}
try this
maxIndex = alItemListDetails.size();
linItemTags = (LinearLayout) findViewById(R.id.linItemTags);
for (int i = 0; i < maxIndex; i++) {
ImageView image = new ImageView(this);
image.setLayoutParams(new android.view.ViewGroup.LayoutParams(80, 60));
image.setMaxHeight(20);
image.setMaxWidth(20);
image.setTag(i);
image.setImageResource(R.drawable.box);
// Adds the view to the layout
linItemTags.addView(image);
image.setOnClickListener(new ImageClickLIstener(i));
}
class ImageClickLIstener implements OnClickListener
{
int position;
ImageClickLIstener()
{
this.position= position;
}
@Override
public void onClick(View v) {
Common.displayToast(ItemDetailsActivity.this, "" + position);
}
}