如何在 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的主要内容,如果未能解决你的问题,请参考以下文章
如何删除GridView内LinearLayout中的空白?