如何在 LinearLayout 中删除 ImageView

Posted

技术标签:

【中文标题】如何在 LinearLayout 中删除 ImageView【英文标题】:How to remove a ImageView inside of LinearLayout 【发布时间】:2017-02-09 11:53:28 【问题描述】:

在我的应用程序中,我从图库中选择照片并以编程方式将它们插入到LinearLayout 中,所以我这样做了:

<LinearLayout
            android:orientation="horizontal"
            android:id="@+id/linearImages"
            android:layout_
            android:layout_>
            <Button
                android:layout_gravity="center"
                android:id="@+id/add_btn"
                android:gravity="center"
                android:drawableLeft="@drawable/add_icon"
                android:layout_marginLeft="10dp"
                android:layout_marginStart="10dp"
                android:layout_
                android:layout_ />
        </LinearLayout>

我为要放置的照片设置了一个标签:

public void AddNewImages(Context context,Bitmap bitmap)
    ImageView img = new ImageView(context);
    img.setScaleType(ImageView.ScaleType.FIT_XY);
    img.setImageBitmap(bitmap);
    img.setTag(tagCount);
    linearImages.addView(img);
    bitmapArray.add(bitmap);
    tagCount++;

我想通过点击来删除图像,正如我之前所说,图像是通过编程方式添加的,所以我需要一些东西来一张一张地删除图像,而没有静态图像位置。

【问题讨论】:

此链接可能会有所帮助***.com/questions/3995215/… 【参考方案1】:

我建议使用RecyclerView 代替LinearLayout。原因是您可以轻松获得单击项目的位置并可以相应地删除。如果您想使用自己的解决方案,那么我建议在添加的每个 ImageView 上添加 setOclickListener。在点击事件之后的监听器中得到imagView.getTag(),这是LinearLayout内的图像视图的位置。然后,您可以使用以下命令从 LinearLayout 中删除图像视图:

ll.removeViewAt(position);// to remove view from particular position

或者如果你想删除被直接点击的ImageView那么:

ll.removeView(view)// to remove particular view

【讨论】:

【参考方案2】:

更新您的 AddNewImages 代码它将起作用。

public void AddNewImages(Context context,Bitmap bitmap)
        ImageView img = new ImageView(context);
        img.setScaleType(ImageView.ScaleType.FIT_XY);
        img.setImageBitmap(bitmap);
        img.setTag(tagCount);
        linearImages.addView(img);
        bitmapArray.add(bitmap);
        tagCount++;
        img.setOnClickListener(clickListner);
        View.OnClickListener clickListner=new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                linearImages.removeView(v);
            
        ;
    

【讨论】:

那么这个ImageView img= (ImageView) v; 是干什么用的? 不需要。你可以直接调用linearImages.removeView(v)。 一开始它可以工作,但如果我再次尝试添加,我得到这个异常“指定的孩子已经有一个父母。你必须先在孩子的父母上调用 removeView()。” 不可能你正在创建一个新的 ImageView 实例,默认情况下它没有父级,所以你如何得到这样的异常。

以上是关于如何在 LinearLayout 中删除 ImageView的主要内容,如果未能解决你的问题,请参考以下文章

如何在android的linearlayout中删除阴影?

如何删除LinearLayout阴影? [重复]

如何删除GridView内LinearLayout中的空白?

在触摸时删除 LinearLayout 项目

如何从 Android 中的 RemoteViews 中删除小部件?

从Android中的LinearLayout中删除视图时出现异常