He implementado un ListView
en mi aplicación de Android. Me ato a esto ListView
usando una subclase personalizada de la ArrayAdapter
clase. Dentro del ArrayAdapter.getView(...)
método anulado , asigno un OnClickListener
. En el onClick
método de la OnClickListener
, quiero lanzar una nueva actividad. Me sale la excepción:
Calling startActivity() from outside of an Activity context requires the
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
¿Cómo puedo obtener el Context
que el ListView
(el actual Activity
) está trabajando?
Respuestas:
Ya sea
O como último recurso,
_ _
Editar: evitaría establecer marcas, ya que interferirá con el flujo normal de eventos y la pila de historial.
fuente
context.startActivity(intent);
acabo de cambiarcontext
a partirApplicationContext
deActivity
Tipo. Esto solucionó el problema.Puede lograrlo con addFlags en lugar de
setFlags
De acuerdo con la documentación que hace:
EDITAR
Tenga en cuenta que si está usando indicadores, cambia la pila del historial como dice la respuesta de Alex Volovoy :
fuente
En lugar de usar el
(getApplicationContext)
usoYourActivity.this
fuente
activity.startActivity
lugar decontext.startActivity
Si recibió un error debido al uso de crear selector como a continuación:
Establezca la bandera para crear un selector como este:
fuente
Además: si muestra enlaces en la vista de lista en fragmentos , no lo cree así
en cambio llame
el adaptador funciona bien en ambos casos, pero los enlaces solo funcionan en el último.
fuente
getApplicationContext()
(excepto la inicialización de la aplicación), pero capté esta excepción. Entonces, las situaciones pueden ser diferentes.this
como contexto funciona en relación con la actividad actual.Creo que tal vez está implementando OnClickListener en el lugar incorrecto; por lo general, definitivamente debe implementar un OnItemClickListener en su Actividad y configurarlo en ListView, o tendrá problemas con sus eventos ...
fuente
o
cambiar a continuación
fuente
Al
Android 28(Android P)
principio ActividadEntonces la mejor manera es agregar
FLAG_ACTIVITY_NEW_TASK
fuente
Mira, si estás creando una intención dentro de un listado en algún método
luego llame al contexto a través de esta vista también:
Ni siquiera necesitará SetFlags ...
fuente
Para cualquiera que tenga esto en Xamarin.Android (MonoDroid) incluso cuando se llama a StartActivity desde la actividad, esto es realmente un error de Xamarin con el nuevo tiempo de ejecución ART, consulte https://bugzilla.xamarin.com/show_bug.cgi?id=17630
fuente
Elaborando la respuesta de Alex Volovoy un poco más:
en caso de que tenga este problema con fragmentos, getActivity () funciona bien para obtener el contexto
En otros casos:
Si no quieres usar
luego realice una función como esta en su OutsideClass -
Ahora, en su actividad principal, cuando realice una nueva clase OutsideClass, llame al método anterior inmediatamente después de definir la clase OutsideClass dando el contexto de la actividad como argumento. También en su actividad principal haga una función
ahora regrese a su clase externa y, para comenzar una nueva actividad, haga algo como esto:
De esta manera, podrá iniciar diferentes actividades llamadas desde diferentes OutsideClass sin meterse con banderas.
Nota: intente no almacenar en caché el objeto de contexto a través del constructor para el fragmento (con adaptador, está bien). Un fragmento debe tener un constructor vacío; de lo contrario, la aplicación se bloquea en algunos escenarios.
recuerda llamar
en la función onResume () también.
fuente
Este error ocurre cuando startactivity no sabe cuál es su actividad. Por lo tanto, debe agregar actividad antes de startActivity ()
debes establecer
fuente
startActivity
desdeFragment
, una persona que llama a menudo puede ser un fragmento, no una actividad.En mi opinión, es mejor usar el método
startActivity()
solo en el código de suActivity.class
. Si usa eso en laAdapter
u otra clase, resultará en eso.fuente
También tuve el mismo problema. Verifique todo el contexto que ha pasado. Para ' enlaces ' necesita un contexto de actividad, no un contexto de aplicación .
Este es el lugar donde debe verificar:
1.) Si utilizó LayoutInflater , compruebe qué contexto ha pasado.
2.) Si está utilizando un adaptador, verifique qué contexto ha pasado.
fuente
Yo tuve el mismo problema. El problema es con el contexto. Si desea abrir algún enlace (por ejemplo, compartir cualquier enlace a través del selector), pase el contexto de actividad, no el contexto de la aplicación.
No olvide agregar
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
si no está en su actividad.fuente
Use este código en su Adaptador_Actividad y use
context.startActivity(intent_Object)
yintent_Object.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Me gusta esto:
Funciona....
fuente
Espero que esto funcione.
fuente
Enfrenté el mismo problema y luego lo implementé
y se resolvió el problema.
Puede haber otra razón relacionada con el adaptador de vista de lista.
Puedes ver este blog , lo describió muy bien.
fuente
Usa este código. Funciona bien para mi. Comparta algo desde fuera de una actividad:
fuente
Dado que agregar indicadores afecta
event_flow
ystack_history
es mejor pasar el 'contexto de aplicación' a la no actividad desde donde necesita llamar a una clase de actividad de la siguiente manera:"ActivityClassName.this" (Si bien pasa el contexto de esta manera, contendrá todos los detalles e información que necesita para llamar a una Actividad desde un escenario sin actividad)
Por lo tanto, no es necesario establecer o agregar indicadores, esto funcionará bien en todos los casos.
fuente
fuente
Si está invocando Compartir Intención en el complemento Cordova, establecer la Bandera no será de ayuda. En su lugar, use esto:
fuente
Mi situación era un poco diferente, estoy probando mi aplicación usando
Espresso
y tuve que iniciar mi Actividad conActivityTestRule
la instrumentaciónContext
(que no es la que viene de unActivity
).Tuve que cambiar las banderas y agregar un
or
bit a bit (|
en Java) conIntent.FLAG_ACTIVITY_NEW_TASK
Entonces resulta en:
fuente
Versión Kotlin
fuente