Resolving ClassCastException using ADT’s visual designer
Recently when maintaining an old android program I encountered a strange exception when attempting to view a layout in visual designer:
error! ClassCastException: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup Exception details are logged in Window > Show View > Error Log The following classes could not be found: - TableLayout (Change to android.widget.TableLayout, Fix Build Path, Edit XML)
Searching stack overflow and Android developers, I found this could be caused by using an old version SDK for an application targeted to a newer version, with new elements. But TableLayout was available since API level 1, and I’m using the latest version of the development tools, so these could not be the problem. The temporary fix was to remove the table layout and replace it with something else.
Today I have the time to compare my code to Android’s example. It turned out to be one tiny little thing that messed the designer up:
<TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:stretchColumns="">
There, one attribute doesn’t match the schema (it should be 0 or 1, not empty “”), and the designer will refuse to load. Worse still, the code will compile but will crash at run-time for the same reason.
My recommendation? Android team should note this case and provide better details on the loading exception in upcoming versions. “ClassCastException” is not really helpful!