How to fix "java.lang.ClassCastException: com.android.layoutlib.bridge.android.BridgeContext cannot be cast to android.app.Activity" exception
Asked Answered
U

1

12

When I create a custom View, where in some cases I need to cast the Context class passed via the constructor for the Activity class, for making some tasks like inflate a View directly inside my custom View class, I'm getting the following error:

java.lang.ClassCastException: com.android.layoutlib.bridge.android.BridgeContext cannot be cast to android.app.Activity

This is the line throwing this error:

View headerView = ((Activity) context).getLayoutInflater().inflate(R.layout.fragment_history_list_header, null);

It seems like this error only occurs when Eclipse tries to inflate the view to be showed in the XML editor (not occurs in runtime).

Does someone know how to fix it?

Thanks in advance.

Ursulina answered 30/9, 2013 at 1:49 Comment(0)
C
8

Change the call to the following. The reason you are getting a class cast exception is because BridgeContext is not of type Activity.

View headerView = LayoutInflater.from(context).inflate(R.layout.fragment_history_list_header, null);
Crisscross answered 30/9, 2013 at 1:55 Comment(3)
Similar issue for me. if (((Activity)getContext()).isTaskRoot()) is the line causing my problem, which is not solved by your (also quite helpful) inflater fix. I'll be back if I find a solution...Paviour
Sort of. More of a kobyashi maru thing. I only saw the bridge context problem in the ADT graphical editor in Eclipse, and guessed that the error was from the editor trying to execute the code for the custom view, and not the unable-to-inflate problem I was having when I ran the app (which turned out to by a simple sleepy-headed typo :( ). In order to still use the layout editor, I used if (!View.isInEditMode()) {} to surround any context-dependent code. The preview isn't pretty, but it lets me still see the other controls.Paviour
Thank you @William T. Mallard. The solution is to surround cast to custom activity with if (!View.isInEditMode()) {}. This was driving me crazy.Microparasite

© 2022 - 2024 — McMap. All rights reserved.