【问题标题】:Removing All Child Views from View从视图中删除所有子视图
【发布时间】:2018-03-14 20:01:37
【问题描述】:

如何从小部件中删除所有子视图?例如,我有一个 GridView,我动态地将许多其他 LinearLayouts 膨胀到其中;稍后在我的应用程序中,我希望从该 GridView 重新开始并清除其所有子视图。我该怎么做? TIA。

【问题讨论】:

    标签: android


    【解决方案1】:
    viewGroup.removeAllViews()
    

    适用于任何视图组。在您的情况下,它是 GridView。

    http://developer.android.com/reference/android/view/ViewGroup.html#removeAllViews()

    【讨论】:

    • 其实removeAllViews()在GridView上调用的时候会抛出异常。来自文档:“此方法不受支持,调用时会引发 UnsupportedOperationException。”
    • 该注释适用于派生 ViewGroup 的抽象基类。 ViewGroup 本身及其所有派生类都支持 removeAllViews。
    • 如何获取ViewGroup
    • @NimmagaddaGowtham 大多数 XxxLayout 类(LinearLayout、RelativeLayout 等)都是 ViewGroup 的子类。如果你有其中之一,你已经有一个 ViewGroup。
    【解决方案2】:

    您可以使用此功能仅删除 ViewGroup 中的某些类型的视图:

    private void clearImageView(ViewGroup v) {
        boolean doBreak = false;
        while (!doBreak) {
            int childCount = v.getChildCount();
            int i;
            for(i=0; i<childCount; i++) {
                View currentChild = v.getChildAt(i);
                // Change ImageView with your desired type view
                if (currentChild instanceof ImageView) {
                    v.removeView(currentChild);
                    break;
                }
            }
    
            if (i == childCount) {
                doBreak = true;
            }
        }
    }
    

    【讨论】:

    • 投了反对票,因为 OP 没有询问如何删除不同类型的子视图。 OP 想要删除所有子视图。
    【解决方案3】:

    试试这个

    RelativeLayout  relativeLayout = findViewById(R.id.realtive_layout_root);
        relativeLayout.removeAllViews();
    

    这段代码对我有用。

    【讨论】:

      【解决方案4】:

      试试这个

      void removeAllChildViews(ViewGroup viewGroup) {
          for (int i = 0; i < viewGroup.getChildCount(); i++) {
              View child = viewGroup.getChildAt(i);
              if (child instanceof ViewGroup) {
                  if (child instanceof AdapterView) {
                      viewGroup.removeView(child);
                      return;
                  }
                  removeAllChildViews(((ViewGroup) child));
              } else {
                  viewGroup.removeView(child);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-03
        • 2011-05-05
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 2012-03-20
        • 1970-01-01
        相关资源
        最近更新 更多