Это потому, что Android использует DecorContext
для действий, начинающихся в Android 27.
Вы можете увидеть это изменение здесь .
Вы можете подтвердить это в системе.уровень, глядя внутрь строки 319 в PhoneWindow .Обратите внимание, что когда PhoneWindow
создается из Activity, для mUseDecorContext
всегда устанавливается значение true.Это означает, что ваше меню будет создаваться с DecorContext каждый раз.
Насколько я понимаю, наличие отдельного DecorContext
для ContextMenu
является намеренным.ContextMenus
предназначены для "плавания" над контентом и, таким образом, действуют как отдельное меню от контента, на котором они представлены.
В зависимости от того, для чего вы используете ContextMenu
, вам может потребоваться рассмотретьожидая сборки Intent
до onContextItemSelected
, даже если вы упомянули, что хотели бы избежать этой ситуации.В качестве альтернативы вам, возможно, придется использовать некоторую форму IPC, чтобы обернуть и отправить свое намерение обратно в действие.Мы используем шаблон RxBus для этого редкого варианта использования.Альтернативные варианты: LocalBroadcastManager
и EventBus от GreenRobot .Надеюсь, это поможет вам начать альтернативные решения.Дайте мне знать, если у вас есть вопросы.