【问题标题】:Handling Click Event of ImageView which is dynamically added处理动态添加的ImageView的点击事件
【发布时间】:2015-12-16 13:56:20
【问题描述】:

代码:

 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.

【问题讨论】:

  • 您是否要创建图像列表?
  • 将 RecyclerView 与 ViewHolder 一起使用会是更好的选择。

标签: android onclick imageview layoutparams


【解决方案1】:

Caused by: java.lang.IllegalStateException: 指定的孩子 已经有了父母。您必须在孩子的父母上调用 removeView() 首先。

因为在linItemTags 布局中多次添加相同的ImageView 对象image

在 for 循环中创建 image 对象:

for (int i = 0; i < maxIndex; i++) {
        ImageView image = new ImageView(this); //<< create here
        ....
        linItemTags.addView(image);
    }

【讨论】:

    【解决方案2】:
    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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2019-11-30
      • 1970-01-01
      相关资源
      最近更新 更多