2016-09-15 4 views
0
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Можно ли отличить View to ViewGroup?

ответ

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 
} 
2

ViewGroup - это подкласс класса View. Итак, если объект, который у вас есть, является экземпляром ViewGroup, то да, конечно, вы можете.

Вы должны проверить, является ли представление экземпляром ViewGroup перед тем, как выполнить кастинг, чтобы исключить исключения.