Я реализовал ListView
в моем приложении для Android. Я связываюсь с этим, ListView
используя пользовательский подкласс ArrayAdapter
класса. Внутри переопределенного ArrayAdapter.getView(...)
метода я назначаю OnClickListener
. В onClick
методе OnClickListener
, я хочу начать новую деятельность. Я получаю исключение:
Calling startActivity() from outside of an Activity context requires the
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Как я могу получить, Context
что ListView
(текущий Activity
) работает под?
Ответы:
Или
Или, в крайнем случае,
_
Редактировать - я бы избегал установки флагов, так как это будет мешать нормальному потоку событий и стека истории.
источник
context.startActivity(intent);
я просто изменилcontext
отApplicationContext
кActivity
типу. Это решило проблему.Вы можете достичь этого с помощью addFlags вместо
setFlags
Согласно документации это делает:
РЕДАКТИРОВАТЬ
Помните, что если вы используете флаги, вы меняете стек истории, поскольку ответ Алексея Волового гласит:
источник
Вместо
(getApplicationContext)
использованияYourActivity.this
источник
activity.startActivity
вместоcontext.startActivity
Если вы получили ошибку из-за использования create chooser, как показано ниже:
Установите флаг для создания chooser следующим образом:
источник
Кроме того: если вы показываете ссылки в списке в фрагменте , не создавайте его так
вместо вызова
В обоих случаях адаптер работает нормально, но ссылки работают только в последнем.
источник
getApplicationContext()
(кроме инициализации приложения), но поймал это исключение. Итак, ситуации могут быть разными.this
качестве контекста работает так, как она связана с текущей деятельностью.Я думаю, что, возможно, вы реализуете OnClickListener не в том месте - обычно вам обязательно нужно внедрить OnItemClickListener в свою активность и вместо этого установить его в ListView, иначе у вас возникнут проблемы с вашими событиями ...
источник
или
изменить на ниже
источник
На
Android 28(Android P)
старте деятельностьТак что лучший способ это добавить
FLAG_ACTIVITY_NEW_TASK
источник
Смотрите, если вы создаете намерение в списке в некотором методе
затем вызовите контекст через это представление:
Там даже не понадобятся SetFlags ...
источник
Для тех, кто получает это на Xamarin.Android (MonoDroid), даже когда StartActivity вызывается из активности - это на самом деле ошибка Xamarin с новой средой выполнения ART, см. Https://bugzilla.xamarin.com/show_bug.cgi?id=17630
источник
Разработка ответа Алексея Волового немного больше -
в случае, если вы получаете эту проблему с фрагментами, getActivity () прекрасно работает, чтобы получить контекст
В других случаях:
Если вы не хотите использовать-
затем сделайте такую функцию в вашем внешнем классе -
Теперь в вашей основной деятельности, когда бы вы ни создавали новый OutsideClass, вызывайте вышеуказанный метод сразу после того, как вы определите OutsideClass, предоставив контекст действия в качестве аргумента. Также в вашей основной деятельности сделать функцию
Теперь вернитесь в свой Внешний класс и, чтобы начать новое занятие, сделайте что-то вроде этого:
Таким образом, вы сможете запускать различные действия, вызываемые из разных OutsideClass, не путаясь с флагами.
Примечание. Старайтесь не кэшировать объект контекста с помощью конструктора для фрагмента (с адаптером, это нормально). Фрагмент должен иметь пустой конструктор, в противном случае приложение аварийно завершает работу в некоторых сценариях.
не забудьте позвонить
в функции onResume ().
источник
Эта ошибка возникает, когда стартовая активность не знает, чем он занимается. Таким образом, вы должны добавить активность перед startActivity ()
вы должны установить
источник
startActivity
изFragment
, вызывающий абонент может часто быть фрагментом, а не деятельность.На мой взгляд, лучше использовать метод
startActivity()
только в вашем кодеActivity.class
. Если вы используете это в томAdapter
или ином классе, это приведет к этому.источник
У меня тоже была такая же проблема. Проверьте весь контекст, который вы прошли. Для « ссылок » требуется контекст деятельности, а не контекст приложения .
Это место, где вы должны проверить:
1.) Если вы использовали LayoutInflater, проверьте, какой контекст вы передали.
2.) Если вы используете какой-либо адаптер, проверьте, какой контекст вы передали.
источник
У меня такая же проблема. Проблема с контекстом. Если вы хотите открыть какие-либо ссылки (например, поделиться какой-либо ссылкой через chooser), передайте контекст активности, а не контекст приложения.
Не забудьте добавить,
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
если вы не в своей деятельности.источник
Используйте этот код в вашей Adapter_Activity и используйте
context.startActivity(intent_Object)
иintent_Object.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Нравится:
Оно работает....
источник
Я надеюсь, что это сработает.
источник
Столкнулся с той же проблемой, а затем реализовал
и получил решение проблемы.
Может быть другая причина, связанная с адаптером представления списка.
Вы можете увидеть этот блог , описал его очень хорошо.
источник
Используйте этот код. У меня отлично работает. Поделитесь чем-то извне деятельности:
источник
Поскольку добавление флагов влияет,
event_flow
иstack_history
лучше передать «контекст приложения» в неактивность, откуда вам нужно вызывать класс активности следующим образом:«ActivityClassName.this» (если вы передадите контекст таким образом, он будет содержать все детали и информацию, необходимые для вызова действия из сценария бездействия)
Таким образом, нет необходимости устанавливать или добавлять флаги, это будет работать нормально в каждом случае.
источник
источник
Если вы запускаете плагин Intent в Cordova, установка флага не поможет. Вместо этого используйте это -
источник
Моя ситуация была немного другой, я тестирую свое приложение с помощью,
Espresso
и мне пришлось запустить свою активность сActivityTestRule
помощью инструментовContext
(а это не то, что приходит отActivity
).Мне пришлось изменить флаги и добавить
or
побитовую (|
в Java) сIntent.FLAG_ACTIVITY_NEW_TASK
Так что это приводит к:
источник
Котлин версия
источник