Как получить активность DecorVIew?.getContext () в DecorView получение DecorContext
на Android 7, получение контекста DecorView
возвращает DecorContext
класс и это не деятельность. Раньше я получал активность, используя Activity a = (Activity)view.getContext()
но он больше не работает для DecorView на Android 7. Есть ли эффективный способ получить активность от DecorView?
Я использую отражение, чтобы получить окно DecorView, а затем получить контекст этого окна (который является Acitivity) на данный момент.
Field f = decorView.getClass().getDeclaredField("mWindow");
f.setAccessible(true);
Window w = (Window) f.get(decorView);
Activity a = (Activity) w.getContext();
есть ли способ использовать стандартный API?
1 ответов
в Android 7 (Нуга) Android представила функцию multi-window, позволяющую открывать 2 мероприятия сразу на экране (будь то ваши действия или 2 разных). Для этого они ввели новый класс под названием DecorContext
используется DecorView
. The DecorContext
is (quote) "контекст для декоративных представлений, которые могут быть засеяны чистым контекст приложения и не зависит от активности, но все еще обеспечивают некоторые из объектов, которые деятельность имеет, например, темы, учет ресурсов и т. д.". Это означает, что DecorView
больше не знает, в какой Activity
это связано, только с которым Application
. Следовательно, идя вперед от нуги, нельзя получить Activity
С .
не уверен, что это все еще относится к вам, но вы можете сделать это:
Activity a = (Activity) decorView.findViewById(android.R.id.content).getContext();