在Android 7上,获取DecorView
的上下文会返回DecorContext
个类,而且它不是活动。我曾经使用Activity a = (Activity)view.getContext()
获取活动,但它不再适用于Android 7上的DecorView。有没有有效的方法从DecorView获取活动?
我使用反射来获取DecorView的窗口,然后获取该窗口的上下文(这是一个Acitivity)。
Field f = decorView.getClass().getDeclaredField("mWindow");
f.setAccessible(true);
Window w = (Window) f.get(decorView);
Activity a = (Activity) w.getContext();
有没有使用标准API的方式?
答案 0 :(得分:5)
在Android 7(Nougat)Android中引入了多窗口功能,使您可以在屏幕上一次打开2个活动(无论是您的活动还是2个不同的活动)。为此,他们引入了一个名为DecorContext
的新类,供DecorView
使用。 DecorContext
是(引用)“装饰视图的上下文,可以使用纯应用程序上下文播种,而不依赖于活动,但仍提供一些活动所具有的设施,例如主题,基于活动的资源等。“这意味着DecorView
不再知道与Activity
相关的Application
,只知道Activity
。因此,从Nougat前进,无法单独从DecorView
获得Activity a = (Activity) decorView.findViewById(android.R.id.content).getContext();
。
不确定它是否仍与您相关,但您可以这样做:
[JsonProperty(PropertyName = "something"", ItemTypeNameHandling = TypeNameHandling.Auto, TypeNameHandling = TypeNameHandling.Auto)]
public BaseSomething Something { get; set; }