删除相对布局中所有自定义 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 作为参数调用此方法即可。