是否可以将View转换为ViewGroup?

时间:2016-09-15 06:33:29

标签: android recursion android-viewgroup

  private void scaleAllViews(ViewGroup parentLayout) {

        int count = parentLayout.getChildCount();
        Log.d(TAG, "scaleAllViews: "+count);
        View v = null;
        for (int i = 0; i < count; i++) {
            try {
                v = parentLayout.getChildAt(i);

                if(((ViewGroup)v).getChildCount()>0){
                   scaleAllViews((ViewGroup)v);
                }else{
                    if (v != null) {
                        v.setScaleY(0.9f);
                    }
                }

            } catch (NullPointerException e) {
            }
        }
    }

我创建了一个递归函数来访问视图组的子项,但parentLayout.getChildAt(i);返回一个View,其中也包含子项,所以我需要访问它,但是在转换后我得到了错误java.lang.ClassCastException: android.support.v7.widget.AppCompatImageView cannot be cast to android.view.ViewGroup

2 个答案:

答案 0 :(得分:2)

在转换为ViewGroup之前,您需要检查它是否为ViewGroup

if(v instanceof ViewGroup) {
    // now this is a safe cast
    ViewGroup vg = (ViewGroup) vg;
    // ... use this ViewGroup
} else {
    // It's some other type of View
}

答案 1 :(得分:2)

ViewGroup是View的子类。因此,如果你拥有的对象是ViewGroup的一个实例,那么你当然可以。

在进行转换之前,应检查视图是否是ViewGroup的实例,以确保不会引发异常。