删除相对布局中所有自定义 ImageView 的简单方法
Simple way to remove all custom ImageViews in Relative Layout
我有一个主要的相关布局,其中包含 CustomImageView。这个 class 扩展了 ImageView 没有什么特别的,只是一个不同的名字,所以它们可以更容易地识别。我想要做的是从主布局中删除此 CustomImageView 的所有实例。
我的问题是,当它们到处嵌套时,你如何做到这一点?例如,它们可以直接是主布局的子级,但也可以是 RadioGroups 和 LinearLayouts 中的子级。
有没有一种我可以在相对布局上调用的简单方法,它会删除其中的所有 CustomImageView 实例?与 RemoveAllViews() 类似,除了删除所有特定类型。
据我所知,没有删除特定类型视图的方法。实现此目的的最佳方法是单独删除每个视图。
您可以使用迭代 ViewGroup
的子项并移除子项(如果它是自定义 View
的实例)或递归调用自身(如果子项是另一个嵌套 ViewGroup
。例如:
private void removeCustomImageViews(final ViewGroup vg) {
final int childCount = vg.getChildCount();
for(int i = 0; i < childCount; i++) {
final View child = vg.getChildAt(i);
if(child instanceof CustomImageView) {
vg.removeView(child);
}
else if(child instanceof ViewGroup) {
removeCustomImageViews((ViewGroup) child);
}
}
}
只需将您的主要 RelativeLayout
作为参数调用此方法即可。
我有一个主要的相关布局,其中包含 CustomImageView。这个 class 扩展了 ImageView 没有什么特别的,只是一个不同的名字,所以它们可以更容易地识别。我想要做的是从主布局中删除此 CustomImageView 的所有实例。
我的问题是,当它们到处嵌套时,你如何做到这一点?例如,它们可以直接是主布局的子级,但也可以是 RadioGroups 和 LinearLayouts 中的子级。
有没有一种我可以在相对布局上调用的简单方法,它会删除其中的所有 CustomImageView 实例?与 RemoveAllViews() 类似,除了删除所有特定类型。
据我所知,没有删除特定类型视图的方法。实现此目的的最佳方法是单独删除每个视图。
您可以使用迭代 ViewGroup
的子项并移除子项(如果它是自定义 View
的实例)或递归调用自身(如果子项是另一个嵌套 ViewGroup
。例如:
private void removeCustomImageViews(final ViewGroup vg) {
final int childCount = vg.getChildCount();
for(int i = 0; i < childCount; i++) {
final View child = vg.getChildAt(i);
if(child instanceof CustomImageView) {
vg.removeView(child);
}
else if(child instanceof ViewGroup) {
removeCustomImageViews((ViewGroup) child);
}
}
}
只需将您的主要 RelativeLayout
作为参数调用此方法即可。